用过C#写串口程序的请进!
我目前正在用C#写一个wince下面的程序,具体功能就是收到一些数据,解释后再发送相应的数据,现在用到了5个窗体,代码一点点的写,结果到了form2的时候出问题了,因为form2不能调用form1中的串口控件,form1中的串口控件需要一直打开,有数据需要发送的时候就发数据,没有数据发送就监听。现在哪位筒子知道怎样让多个窗体共用一个串口控件? 呼叫大侠 还是可以访问的只要将form1的 对象告诉 form2 就可以了... 可否具体点? LZ,改成public就可以被其它类访问了,这是明显的事。。。 我已经改成public了,关键问题是,我还调用form1中的一个senddata函数,用来发数据,现在一发数据就提示串口是关闭状态,open一下就说端口不存在,因为都是使用一个com口的,怎么办? 发送啊,接收啊,打开一次就够了,不要关掉串口。保持引用。 1.把串口类封装成static
2.要注意加锁,避免通信冲突
3.你把你程序的流程画出来,会比较好解决 我一般用一个专门的线程来处理串口通讯(串口控件放进组件中)、另一个线程处理数据,主UI线程只负责窗口显示,这样速度快(尤其在多核处理器上),界面没延迟。
跟着这篇文章做一遍就明白了
http://msdn.microsoft.com/en-us/library/48cfdff6%28v=VS.90%29.aspx
多线程通讯示例:
点击此处下载 ourdev_663996ARKSRB.rar(文件大小:48K) (原文件名:multithread.rar) sendmessage 或用 委托 还没用到多线程 MARK一下 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更新和数据处理感觉上几乎同时发生(如果你用双核处理器就是同时发生),用户界面流畅,提高产品形象。 mark~~ mark
页:
[1]