| 分類:[.NET 全般]
Data​Receivedイベント内でReadExistingメソッドが タイムアウトすることがWindowsのイベントログに残りました。 現象を確認しようとしていますが再現がさせられません。 ご指導ください。
■通信概要 相手局から送られるデータを受け取り処理します。 データは$で始まりCR(0Dh)で終わる文字列。 長さはまちまちで3〜20バイト程度。 送られる間隔もまちまちで100〜200ms。 通信設定:115200bps,8bit,1stop,NoParity
■受信処理 private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { data = ((SerialPort)sender).ReadExisting(); // TimeoutException発生箇所
// dataの処理(略) }
■推定要因 何らかの理由でDataReceivedイベントに遅れが生じ バッファに溜まった複数のデータをReadExistingで処理した。 そうすると、次回DataReceivedが呼ばれたときには バッファにデータが残っておらずTimeoutExceptionが発生する。 という筋書きです。
■試したこと
// 「DataReceivedイベントの遅れ」を強制的に生じさせるため // DataReceivedを抜ける前にDelayを追加 private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { data = ((SerialPort)sender).ReadExisting(); // ここでTimeoutException発生
// dataの処理(略)
Thread.Sleep(1000); // Delay }
■結果 現象再現しませんでした。 ReadExistingで複数データの処理はされましたが 次のイベントが入ってきません。 上記考えは間違っていますでしょうか? ほかに考えられる要因はありますでしょうか? よろしくお願いします。
■環境 Visual Studio 2010 .NET Framework 4
|