C#串口通信遇到的坑
C#串口通信中有一个DataReceived事件可以委托一个接收函数。此接收函数是运行在辅线程(secondary thread)上的。如果要在这个函数中修改主线程中的一些元素,比如UI界面上的变量的值,必须使用委托的方式。DataReceived所注册的接收函数和主线程中的发送函数是异步的。如若想用同步的方式进行发送和接收。阻塞读是一个解决方案。阻塞读是指如果发送的指令没有接收完毕,那么接收方法被堵塞。此时也不能发送下一条指令。串口中有一个readLine方法是阻塞读的。部分代码如下:
String order1; order1 = "命令一"; sp1.WriteLine(order1); sp1.ReadLine(); order1 = "命令二"; sp1.WriteLine(order1);
如果命令一发送后,sp1的readLine方法没有接收完毕。在这里就是接收一行。那么命令二是不会继续执行的。