德国4级经典电影磁力:用过C#写串口程序的请进! 中国电子开发网(www.ourdev.cn)

来源:百度文库 编辑:偶看新闻 时间:2024/05/03 00:31:30

我目前正在用C#写一个wince下面的程序,具体功能就是收到一些数据,解释后再发送相应的数据,现在用到了5个窗体,代码一点点的写,结果到了form2的时候出问题了,因为form2不能调用form1中的串口控件,form1中的串口控件需要一直打开,有数据需要发送的时候就发数据,没有数据发送就监听。现在哪位筒子知道怎样让多个窗体共用一个串口控件?

1.把串口类封装成static
2.要注意加锁,避免通信冲突
3.你把你程序的流程画出来,会比较好解决
我一般用一个专门的线程来处理串口通讯(串口控件放进组件中)、另一个线程处理数据,主UI线程只负责窗口显示,这样速度快(尤其在多核处理器上),界面没延迟。

跟着这篇文章做一遍就明白了
http://msdn.microsoft.com/en-us/library/48cfdff6%28v=VS.90%29.aspx

多线程通讯示例:
点击此处下载 ourdev_663996ARKSRB.rar(文件大小:48K) (原文件名:multithread.rar) 

Program.cs里添加static的Send Command Queue和Receive Command Queue
把SerialPort封装进Component,Component在Main里启动,启动后台发送线程循环检查Send Command Queue是否有数据,有的话就发。SerialPort的Receive事件对接收到的数据做简单处理然后直接Enqueue进Receive Command Queue。
在UI线程里启动一个主线程循环处理Receive Command Queue接收到的数据;主线程和窗口UI的通讯使用Event和control.invoke来进行。

这样做的好处是一个线程不工作或等待数据时可以把CPU时间让给另一个线程,UI更新和数据处理感觉上几乎同时发生(如果你用双核处理器就是同时发生),用户界面流畅,提高产品形象。