|
分類:[.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
|