自学C#一段时间了,想开发个小程序(串口通讯)。现在碰到了一些问题,向大侠们请教下。工程里面有主窗口 MainForm.cs // 一个串口调试的界面,显示发送和接收的数据子对话框 FileForm.cs // 文件操作,选择文件后 打开文件 将文件分成N包数据。点击升级后发送串口数据升级子对话框 SetForm.cs // 做一些串口的设置串口类 Justio.cs // 网上下载的一个串口类,根据网上的修改为 线程不断读串口,有数据来的话触发事件现在问题 外面数据来了,触发了读串口事件后,我该如何 将有用数据(截获一包完整的数据)发送给 主窗口,让主窗口显示接收到的数据。或者将有用的数据发送给 子对话框,让子对话框接收数据,并且解析处理。
解决方案 »
- 关于数据库connection与reader相互绑定的疑问
- DotNetSpeech中实现中文女声发音
- C#4.0入门 第一章 dynamic类型—第一页 dynamic类型与统一调用(因为前贴中HTML为乱码,故重发此贴)
- 为了提高效率,SqlConnection对象一般是用全局变量\窗体级变量还是局部变量 ?
- 怎么获得ArrayList中某一个对象。
- 在C#上如何像VB一样用DateDiff这个function来测出两个日期的差距
- 坐标原点变换后,绘制矩形出现的问题?
- 关于绑定后在checkboxlist items 加属性的难题?
- 程序输出文件不包含已定义的入口 如何解决?
- 请问如何自定义WORD中右键的问题?
- 用C#如何截取英语单词?
- 关于天气的WebService
public event ShowPacketHandler ShowPacket;
收包后: if(ShowPacket!=null) ShowPacket(yourData);类实例化时:
Justio j = new Justio();
j.ShowPacket += new ShowPacketHandler(Form3_ShowPacket);void Form3_ShowPacket(object o)
{
//...
}
本内容使用CSDN小秘书回复
每天回帖即可得10分可用分!
*************************************************[/align]
JustinIO.cs public delegate void ReadEventHandler(object sender, byte[] Buffer); class CommPort
{
// 事件的声明
public event ReadEventHandler ReadEvent; private void OnReadEvent(byte[] Buffer)
{
if (ReadEvent != null)
{
ReadEvent(this, Buffer);
}
}
// 注意打开端口的时候开的一个新线程,该线程不断读取串口,判断串口是否有数据,如果有数据来 触发OnReadEvent事件。
private void Execut()
{
while (Done)
{
byte[] Buffer = this.Read(128);
if (Buffer.Length > 0)
{
OnReadEvent(Buffer);
}
}
}
public void Open()
{
...
Thread th = new Thread(new ThreadStart(Execut));
th.Start(); //问题二 : 线程是何时关闭的?需要关闭不
} public void OnRead(object sender, byte[] Buffer)
{
// 这里是我的事件处理,当串口数据来了的话,我在这里分析取出 按照协议来的完整数据。
// 然后我将取出来的完整数据,发给MainForm 和FileForm
// 在VC中我们可以发送一个消息给 MainForm 或 FileForm,而在VC里面我该如何呢?
} }
MainForm.cs
PortSet portSettings = new PortSet(); // 串口参数设置
FileSet fileSettings = new FileSet(); // 升级文件
static JustinIO.CommPort ComPort = new JustinIO.CommPort();// ComPort.ReadEvent += new ReadEventHandler(ComPort.OnRead); //
ComPort.Open() // 打开串口