0

私は、シリアル ポート経由でデジタル マルチメーターと接続する C# Windows Forms アプリケーションに取り組んでいます。BackgroundWorker のDoWorkイベント ハンドラーで、複数のコマンドをマルチメーターに送信します。たとえば、電圧/抵抗の測定を行い、データを返すように要求します。次に、シリアル ポートのDataReceivedイベントが発生し、そのメソッドで簡単な処理を行います。データを使用ReadLine()して文字列に保存します。しかし、DoWorkとは非同期であるため、データを要求するステートメントの直後にDataReceivedその文字列を使用しようとすると、正しい値が得られないと思います。終わるDoWorkのを待たなければなりません。DataReceived現在、私はただ持っていますThread.Sleep(100)そのような声明のたびに。これは最善の解決策ではないと確信しています。何とか終了するのを待つDataReceived、またはこのスレッドの問題に対処するより効率的な方法はありますか?

4

1 に答える 1

0

同期作業ではなく非同期作業を行うため、バックグラウンド ワーカーをまったく使用しないでください。代わりに、リクエストを送信するだけで、イベント ハンドラ内でレスポンスに対して必要なことをすべて実行できます。

于 2013-06-18T18:46:05.873 に答える