-2

c# と Application.DoEvents() でのスレッド化に関する記事を何十も読んだことがありますが、それでも適切に使用してタスクを完了できません。COM に接続されたコントローラーがあり、このコントローラーはコマンドで動作します (コマンドを送信します)。 、応答を得るために数ミリ秒待つ必要があります)、応答はループを使用して時間間隔ごとにプロットしたいデータであると仮定します:

  • 私のループを開始します。
  • serialPort 経由でコントローラにコマンドを送信します。
    • 応答を待ちます (20 ミリ秒待ちます)。
    • データを取得します。
  • 100ミリ秒ごとにこのループを繰り返します。

これは単に機能したくありません!! 他のスレッドでデータコントローラーと通信しようとしたのですが、メインスレッドに属するserialPortにアクセスできないようです(ざっくり言うと)。

どんな助けでも大歓迎です

4

3 に答える 3

0

SerialPort.DataReceived イベントをキャッチしてから SerialPort.ReadLine または SerialPort.Read(byte[],int,int) を使用すると、これらのメソッドは新しいスレッドで実行されます。共有リソースとしてのバイト バッファーへのアクセスを制御するには、ミューテックスを使用することを好みます。また、デバイスと正常に通信したことがありますか? ポート設定以外の場合は、SerialPort.NewLine プロパティと SerialPort.Handshake プロパティを確認してください。これらの設定は、通信しようとしているデバイスによって異なります。

于 2013-11-15T17:09:54.637 に答える