次のようなコードを使用して、シリアル ポート (つまり、COM3) に送信されたデータを読み取っています。
_serialPort.PortName = "COM3";
_serialPort.BaudRate = 9600;
_serialPort.Parity = Parity.None;
_serialPort.DataBits = 8;
_serialPort.StopBits = StopBits.One;
_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;
_serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
_serialPort.Open();
そのシリアル ポートからのデータはコマンドであり、'\0' で終わる任意の長さの文字列にすることができます。そのようなデータを効率的に読み取る方法に関するベスト プラクティスを探しています。プロデューサー/コンシューマーのパターンが最適かもしれないと考えています。
- DataReceived イベントが発生するたびに、ポートから文字列を読み取り、stringbuffer またはその他の構造に追加します。
- 次に、char '\0' の stringbuffer または構造体を常に検査し、見つかった場合はコマンド文字列を解析して削除する別のスレッドがあります。
これは、これを処理する最も効率的な方法でしょうか? dataReceived イベントに依存しないブロッキング シリアル読み取り関数はありますか?