2012-04-03 92 views

回答

1

不,只有當您調用Read()並且沒有要讀取的數據時纔會引發TimeoutException。 DataReceived事件在有數據可用時觸發,因此Read()調用永遠不會引發該異常。

一個簡單的解決方法是使用自己的計時器。在事件處理函數中調用它的Stop()和Start()方法來重置計時器。當Tick事件觸發時聲明失敗。

1

簡短的回答是但你should't

有沒有內置的方式來做到這一點。但是,您可以在SerialDataReceivedEventHandler中設置一個計時器(如Hans提到的),並在每次接收字符時重置此計時器。如果計時器到期,您可以確定您可能沒有收到任何數據。

這就是說,串行通信有其怪癖。定時器到期的事實並不意味着其他系統已經結束了數據傳輸。可能會有一些流量控制機制在兩個系統之間等待另一個系統,可能會在一端或另一端出現延遲。 (如果你的系統很忙,它可能會在觸發事件之前緩衝串行數據)

通常,當收到一些特定的字符(通常爲CR/LF)時,確定傳輸結束,這比等待指定的超時時間

相關問題