2011-01-24 18 views
1

データの送受信にシリアルポート通信をしようとしています。ここにscenerioがあります:シリアルポートからデータを読み込んで送信する

シリアルポートに接続してデバイスを起動します。それが何かをするためにカウントダウンしているとき、私はそれを一時停止し、仕事にいくらかのコマンドを送るべきです。それはすべての仕事をして、再びスタートが続きます。

今私はインターネットを介して検索し、C#は私に合っています。これをしている間私に何かを提案できますか?私はどのようにして始めることができ、どのメソッドを使用する必要がありますか?ありがとうございました。

答えて

1

hereここには、C#でシリアルポートを使用する際の優れた方法が記載されています。

+1

私はその記事全体を読んでいませんが、Writeコマンドが発行されたセクションが見つかりました。 SerialPortクラスに深刻な問題があり、それが気づかない人には怒ってしまいます。 SerialPort.ReadおよびSerialPort.Writeはスレッドセーフではありません。同時に両方を入力すると、あなたのオブジェクトはあらゆる種類の狂気になります。ほとんどのシリアルプロトコルはデータレートが低いため頻繁には発生しませんが、発生したときには頭が傷ついてしまいます。接続が全二重であっても、読み書きステートメントの周りにロックを置くことは重要です。 – Nate

+0

@Nate、これはMTコードを書く場合にのみ問題になります。そのことを明らかにして、それはまったく深刻な問題ではありません。 –

+0

真。 DataReceivedイベントを使用すると、マルチスレッド化されます。また、ユーザーがボタンをクリックしてコマンドを送信すると、GUIスレッドに入ります。私はGUIスレッド(ポーリングプロトコルの場合)でReadを常に呼び出すことによってGUIをブロックしたくないでしょう。データ転送速度の高いアプリは、GUI同期、BackgroundWorkers、またはデータ解析スレッドなど、ほとんど常にマルチスレッドになります。ロックモデルを理解すると、読み取りと書き込みを保護するだけで大​​したことはありません。 – Nate

3

.NETフレームワークでも、適切なSerialPort classがあります。これは、アプリケーションに最適です。

関連する問題