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