我已经阅读过几篇关于c#和Application.DoEvents()中的线程的文章...仍然无法正确使用它来完成我的任务: 我有一个控制器连接到我的COM,这个控制器工作命令(我发送命令,需要等待几毫秒才能得到它的响应),假设响应是我想要使用循环绘制每个时间间隔的数据: / p>
这根本不想工作!!我试图与其他线程上的数据控制器进行通信,但似乎无法访问属于主线程的serialPort(粗略地说)。
感谢任何帮助
答案 0 :(得分:2)
Application.DoEvents就是它所做的一切 - 只不过是对同一线程上的windows(低级)消息循环的嵌套调用。如果在事件处理程序中调用它,则可能很容易导致递归。您可以考虑在工作线程上创建串行端口对象,并通过线程类(即WaitHandles等)进行通信。或者使用UI对象上的“BeginInvoke”和“EndInvoke”回调您的UI线程。
答案 1 :(得分:0)
如果捕获SerialPort.DataReceived事件然后使用枯竭的SerialPort.ReadLine或SerialPort.Read(byte [],int,int),那么这些方法将在新线程上执行。我更喜欢使用互斥锁来控制对作为共享资源的字节缓冲区的访问。你有没有成功地与你的设备沟通?如果不是端口设置,请检查SerialPort.NewLine属性和SerialPort.Handshake属性。这些设置取决于您尝试与之通信的设备。
答案 2 :(得分:-1)
为什么开始使用它?
看看这个页面,它可能会给你一个方向
没有代码,就很难提供帮助。即使使用代码,也可能很难提供帮助:)
我同意gunr2171:)