簡體   English   中英

C#強制要觸發SerialPort.DataReceived事件

[英]C# Force SerialPort.DataReceived event to fire

像許多人一樣,我遇到了DataReceived事件沒有觸發的問題。

使用它之后,我將處理過程包裝在BytesToRead計數下,所以如果我錯過了火,我可以在我離開的地方繼續。 看起來它會解決我所有的問題。

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

通過對類似問題的一些回答閱讀並沒有讓我更接近保證事件將以最低要求激發。 微軟提到DataReceived無法保證為每個字節觸發的問題 ,但我注意到了上述情況:

無論內部輸入緩沖區中的字節數和ReceivedBytesThreshold屬性的值如何,如果收到Eof字符,也會引發DataReceived事件。

所以我的問題是,我可以通過串行連接強制EOF角色強制事件發生嗎? 這個角色是什么,0x1A?

如果我不能通過連續強制EOF角色,我的選擇是什么? 我的第一個想法是創建一個任務來監視事件觸發,如果它沒有觸發,則通過任務觸發操作。

所以我能夠解決我的問題,更明智一點。

根據我的觀察, ReadBytesThreshold在事件實際有效性ReadBytesThreshold起着關鍵作用。 當閾值設置得太低時,串口容易讓自己感到困惑,並最終會放棄並放棄。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM