我使用SerialDataReceivedEventHandler
來知道我的SerialPort
對象何時接收數據。使用SerialDataReceivedEventHandler可以知道何時發生超時?
是否有可能知道何時我不會再接收數據,因爲發生了字節間超時?
我使用SerialDataReceivedEventHandler
來知道我的SerialPort
對象何時接收數據。使用SerialDataReceivedEventHandler可以知道何時發生超時?
是否有可能知道何時我不會再接收數據,因爲發生了字節間超時?
不,只有當您調用Read()並且沒有要讀取的數據時纔會引發TimeoutException。 DataReceived事件在有數據可用時觸發,因此Read()調用永遠不會引發該異常。
一個簡單的解決方法是使用自己的計時器。在事件處理函數中調用它的Stop()和Start()方法來重置計時器。當Tick事件觸發時聲明失敗。
簡短的回答是你能但你should't。
有沒有內置的方式來做到這一點。但是,您可以在SerialDataReceivedEventHandler中設置一個計時器(如Hans提到的),並在每次接收字符時重置此計時器。如果計時器到期,您可以確定您可能沒有收到任何數據。
這就是說,串行通信有其怪癖。定時器到期的事實並不意味着其他系統已經結束了數據傳輸。可能會有一些流量控制機制在兩個系統之間等待另一個系統,可能會在一端或另一端出現延遲。 (如果你的系統很忙,它可能會在觸發事件之前緩衝串行數據)
通常,當收到一些特定的字符(通常爲CR/LF)時,確定傳輸結束,這比等待指定的超時時間