現在参照されているオブジェクトのステータスをチェックする別のスレッドを設定しようとしています。
メインスレッドは、プログラムを実行し、シリアル接続の状態も処理します。
2 番目のスレッドは、バッファからのコマンドの送受信を継続するために、接続状態にアクセスする必要があります。
これは可能ですか?
現在参照されているオブジェクトのステータスをチェックする別のスレッドを設定しようとしています。
メインスレッドは、プログラムを実行し、シリアル接続の状態も処理します。
2 番目のスレッドは、バッファからのコマンドの送受信を継続するために、接続状態にアクセスする必要があります。
これは可能ですか?
もちろん。シリアル デバイスを制御するスレッドは、最後に読み取った状態を記憶するスレッド セーフな読み取り専用プロパティを提供する必要があります。他のスレッドは、いつでもそのプロパティを読み取ることができます。
簡単な解決策は次のとおりです。
string lastReadState = "";
object StateLock = new Object();
string State { get { lock(StateLock) { return lastReadState; } } }
// Main thread working away...
lock (StateLock) { lastReadState = ReadCurrentState(); }
// Other thread working away...
string state = State;
編集(コメントを見た後)
SomeStateClass lastReadState = new StateClass();
object StateLock = new Object();
SomeStateClass State { get { lock(StateLock) { return lastReadState; } } }
// Main thread figures out the new state information at some point...
lock (StateLock) { lastReadState = new StateClass { Prop1 = whatever, ... }; }
// Other thread uses the state
var relevantInfo = State.Prop1;