C#串口通信中有一個DataReceived事件可以委托一個接收函數。此接收函數是運行在輔線程(secondary thread)上的。如果要在這個函數中修改主線程中的一些元素,比如UI界面上的變量的值,必須使用委托的方式。DataReceived所注冊的接收函數和主線程中的發送函數是異步的。如若想用同步的方式進行發送和接收。阻塞讀是一個解決方案。阻塞讀是指如果發送的指令沒有接收完畢,那么接收方法被堵塞。此時也不能發送下一條指令。串口中有一個readLine方法是阻塞讀的。部分代碼如下:
String order1; order1 = "命令一"; sp1.WriteLine(order1); sp1.ReadLine(); order1 = "命令二"; sp1.WriteLine(order1);
如果命令一發送后,sp1的readLine方法沒有接收完畢。在這里就是接收一行。那么命令二是不會繼續執行的。