データの送受信にシリアルポート通信をしようとしています。ここにscenerioがあります:シリアルポートからデータを読み込んで送信する
シリアルポートに接続してデバイスを起動します。それが何かをするためにカウントダウンしているとき、私はそれを一時停止し、仕事にいくらかのコマンドを送るべきです。それはすべての仕事をして、再びスタートが続きます。
今私はインターネットを介して検索し、C#は私に合っています。これをしている間私に何かを提案できますか?私はどのようにして始めることができ、どのメソッドを使用する必要がありますか?ありがとうございました。
私はその記事全体を読んでいませんが、Writeコマンドが発行されたセクションが見つかりました。 SerialPortクラスに深刻な問題があり、それが気づかない人には怒ってしまいます。 SerialPort.ReadおよびSerialPort.Writeはスレッドセーフではありません。同時に両方を入力すると、あなたのオブジェクトはあらゆる種類の狂気になります。ほとんどのシリアルプロトコルはデータレートが低いため頻繁には発生しませんが、発生したときには頭が傷ついてしまいます。接続が全二重であっても、読み書きステートメントの周りにロックを置くことは重要です。 – Nate
@Nate、これはMTコードを書く場合にのみ問題になります。そのことを明らかにして、それはまったく深刻な問題ではありません。 –
真。 DataReceivedイベントを使用すると、マルチスレッド化されます。また、ユーザーがボタンをクリックしてコマンドを送信すると、GUIスレッドに入ります。私はGUIスレッド(ポーリングプロトコルの場合)でReadを常に呼び出すことによってGUIをブロックしたくないでしょう。データ転送速度の高いアプリは、GUI同期、BackgroundWorkers、またはデータ解析スレッドなど、ほとんど常にマルチスレッドになります。ロックモデルを理解すると、読み取りと書き込みを保護するだけで大したことはありません。 – Nate