2012-04-03 5 views

Antwort

1

Nein, eine TimeoutException wird nur ausgelöst, wenn Sie Read() aufrufen und keine Daten zu lesen sind. Das DataReceived-Ereignis wird ausgelöst, wenn Daten verfügbar sind, sodass der Aufruf Read() diese Ausnahme niemals auslösen kann.

Eine einfache Problemumgehung besteht darin, Ihren eigenen Timer zu verwenden. Rufen Sie in Ihrem Ereignishandler die Methode Stop() und Start() auf, um den Zeitgeber zurückzusetzen. Und Fehler melden, wenn das Tick-Ereignis ausgelöst wird.

1

Die kurze Antwort ist, dass Sie konnte aber Sie should't.

Es gibt keine integrierte Möglichkeit, dies zu tun. Sie könnten jedoch einen Timer (wie Hans erwähnt) in Ihrem SerialDataReceivedEventHandler einrichten und diesen Timer jedes Mal zurücksetzen, wenn Sie Zeichen empfangen. Wenn der Timer abläuft, können Sie feststellen, dass Sie möglicherweise keine Daten mehr empfangen.

Dies gesagt, serielle Kommunikation hat seine Macken. Die Tatsache, dass der Timer abläuft, bedeutet nicht, dass das andere System mit der Übertragung von Daten beendet ist. Es könnte einen Flusskontrollmechanismus geben, bei dem ein System auf einen anderen wartet, es könnte eine Verzögerung auf dem einen oder anderen Ende geben. (Wenn Ihr System beschäftigt ist, kann es serielle Daten puffern, bevor das Ereignis ausgelöst wird.)

Normalerweise wird das Übertragungsende bestimmt, wenn ein bestimmtes Zeichen empfangen wird (normalerweise CR/LF), das robuster ist als das Warten auf a spezifizierter Timeout

Verwandte Themen