C#串口的BytesToRead屬性

https://www.cnblogs.com/TrueElement/archive/2012/07/19/2598972.html

今天調試串口,發現BytesToRead可以比ReadBufferSize屬性值大,而且這個大不是表面數值上的大,實際數據也沒有丟失。

查了MSDN SerialPort. BytesToRead 屬性 發現如下說明:

由於 ReadBufferSize 屬性只表示 Windows 創建的緩衝區,而 BytesToRead 屬性除了表示 Windows 創建的緩衝區外還表示 SerialPort 緩衝區,
所以 BytesToRead 屬性可以返回一個比 ReadBufferSize 屬性大的值。 

  接收緩衝區包括串行驅動程序的接收緩衝區以及 SerialPort 對象自身的內部緩衝。

 那麼串行驅動程序的緩衝區到底有多大呢?沒有搜索到,試了一下,可以大於65K,之後沒再試了。


    另外,對於SerialPort.DataReceived 事件,假如一次事件的處理中,還沒處理完,輸入緩衝區又達到了SerialPort.ReceivedBytesThreshold的大小,此時不會再執行多一次DataReceived處理函數(即不會同時有兩個DataReceived線程在運行),只有當前一次的處理完了之後,再從頭執行DataReceived方法。假如一直這樣的話,程序運行倒不會有問題,只是當接收的未處理的數據量大於緩衝區的大小時,數據將丟失。


    對於這種情況,覺得比較好的是在DataReceived裏面再專門開一個線程,用於處理數據。DataReceived只負責接收。

發佈了113 篇原創文章 · 獲贊 20 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章