2016-12-12 107 views
1

與許多人一樣,我遇到DataReceived事件未觸發的問題。C#強制SerialPort.DataReceived事件觸發

使用它之後,我在BytesToRead計數下包裝了我的處理過程,所以如果我錯過了一次火災,我可以接收我離開的地方。看起來像它會解決我所有的問題。

問題是,有時甚至不會觸發一次。根據發回的數據包,這可能是絕對關鍵的,迫使我重新啓動應用程序和設置過程,因爲它依賴於能夠處理響應。

通過閱讀對類似問題的一些回答,我沒有更接近地保證該活動將按照最低要求進行啓動。 Microsoft mentions the issue with DataReceived不被保證觸發爲每個字節,但我這上面注意到:

如果接收到EOF字符,而不管字節在內部輸入緩衝器的數量和值的DataReceived事件檢索也上升ReceivedBytesThreshold屬性。

所以我的問題是,我可以強制通過我的串行連接EOF字符強制事件觸發?這個角色會是什麼,0x1A?

如果我不能強制通過串行的EOF字符,我的選擇是什麼?我的第一個想法可能是創建一個任務來監視事件觸發,如果它不觸發,通過任務觸發操作。

回答

0

所以我能夠解決我的問題,出來一點聰明。

根據我的觀察,ReadBytesThreshold在事件實際效果如何有效方面起着至關重要的作用。當閾值設置得太低時,串口有一種讓自己感到困惑的傾向,最終會放棄並放棄。

設置這接近我預期數據的大小似乎有助於減輕足夠的負擔,使閱讀相當一致。

我沒有測試我關於使用任務的想法,但在線閱讀似乎回答了我關於使用0x1A的問題:從我注意到的情況來看,如果它接收到這個字符(至少在Windows機器上) 。