C#中SerialPort类接收数据的多线程问题

学习c#进行串口读写的时候我发现:如果你期望发送一次接收一次,接着马上再发送一次接收一次。通过把发送接收的消息发送到终端,会先发送两次再接收数据,而这时候应该只能接收到一次的数据了。

sp.DataReceived += new SerialDataReceivedEventHandler(自定义方法);

原因如下:

MSDN:从 SerialPort 对象接收数据时,将在辅助线程上引发 DataReceived 事件。由于此事件在辅助线程而非主线程上引发,因此尝试修改主线程中的一些元素(如 UI 元素)时会引发线程异常。如果有必要修改主 Form 或 Control 中的元素,必须使用 Invoke 回发更改请求,这将在正确的线程上执行.进而要想将辅助线程中所读到的数据显示到主线程的Form控件上时,只有通过Invoke方法来实现。

这里我虽然没有对元素进行修改,但我在自己绑定的方法中有100ms的延时,即辅助线程会延时100ms。主线程中发送两次数据没有延时,因此会出现直接发送两次而接受一次数据的情况。解决方法是在主线程中两次发送之间也设置相应的延时。

System.Threading.Thread.Sleep(200);

猜你喜欢

转载自blog.csdn.net/tengfeipu/article/details/81094636