C#串列埠通訊遇到的坑

blogli發表於2017-10-20

C#串列埠通訊中有一個DataReceived事件可以委託一個接收函式。此接收函式是執行在輔執行緒(secondary thread)上的。如果要在這個函式中修改主執行緒中的一些元素,比如UI介面上的變數的值,必須使用委託的方式。DataReceived所註冊的接收函式和主執行緒中的傳送函式是非同步的。如若想用同步的方式進行傳送和接收。阻塞讀是一個解決方案。阻塞讀是指如果傳送的指令沒有接收完畢,那麼接收方法被堵塞。此時也不能傳送下一條指令。串列埠中有一個readLine方法是阻塞讀的。部分程式碼如下:

 String order1;
 order1 = "命令一";
sp1.WriteLine(order1);
 sp1.ReadLine();  
order1 = "命令二";
sp1.WriteLine(order1);

如果命令一傳送後,sp1的readLine方法沒有接收完畢。在這裡就是接收一行。那麼命令二是不會繼續執行的。

 

相關文章