今日、私はいくつかの奇妙な行動に出くわしました。SerialPortクラスを使用してアクセスするシリアルデバイスがあります。メイン アプリケーションには、ステータス更新のためにデバイスを 1 秒ごとにポーリングするタイマーがあります。ある時点で、時間のかかる作業を行う必要があるため、使用した GUI をブロックしないようにする必要がありますBackgroundworker。バックグラウンド ワーカーは、同じシリアル デバイスにアクセスするために 1 回必要です。時々アクセスがうまくいかないことがあります。古典的なmutli-threadシナリオ。そこで、新しいコマンドをシリアル デバイスに送信する関数で Mutex を使用してみました。
シリアル デバイスについては、すべてを独自のクラスにまとめました。このクラスにはsendCommand()、コマンドをデバイスに書き込み、AutoResetEventイベントを使用OnDataReceivedして応答を待つ関数があります。関数 sendCommand は、応答が受信されるかタイムアウトが発生するまでブロックします。Mutex次に、 sendCommand に入るときにを追加し、releaseMutex可能なすべての出口に を追加しました。それでも機能しません。
これを処理するより良い方法はありますか?
ありがとう、トバイアス