1 回答

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊
1)一般的來說,要保證實(shí)時(shí)性(接收實(shí)時(shí)性以及發(fā)送的實(shí)時(shí)性),對(duì)串口操作采用多線程:一個(gè)線程負(fù)責(zé)接收;另一個(gè)線程負(fù)責(zé)發(fā)送。
2)在 .Net類庫中 System.IO.Ports.SerialPort就是采用這種方案:即無論你程序是否啟動(dòng)額外線程來處理窗口接收與發(fā)送,System.IO.Ports.SerialPort類都是按照多線程方式工作!
3)在MSDN關(guān)于SerialPort 類的文檔中,請(qǐng)注意SerialPort類有個(gè)屬性BaseStream。這個(gè)屬性用于顯式異步 I/O 操作,即多線程方式操作串口
4)同樣,在MSDN文檔中關(guān)于SerialPort.DataReceived 事件的說明中有這么一句話:“……從 SerialPort 對(duì)象接收數(shù)據(jù)時(shí),將在輔助線程上引發(fā) DataReceived 事件……”,意思很明白:DataReceived事件是在主線程之外的另一個(gè)輔助線程上引發(fā)的!
====
說了這么多,結(jié)論很簡(jiǎn)單:
串口通訊絕對(duì)適合使用多線程編程,因?yàn)镾ystem.IO.Ports.SerialPort本身就支持多線程操作;當(dāng)然,你完全可以繞開System.IO.Ports.SerialPort提供的多線程機(jī)制,實(shí)現(xiàn)自己的單線程輸入與輸出操作。除非你有你特定的需求,這樣做顯然不是上策。
添加回答
舉報(bào)