0

現在参照されているオブジェクトのステータスをチェックする別のスレッドを設定しようとしています。

メインスレッドは、プログラムを実行し、シリアル接続の状態も処理します。

2 番目のスレッドは、バッファからのコマンドの送受信を継続するために、接続状態にアクセスする必要があります。

これは可能ですか?

4

1 に答える 1

1

もちろん。シリアル デバイスを制御するスレッドは、最後に読み取った状態を記憶するスレッド セーフな読み取り専用プロパティを提供する必要があります。他のスレッドは、いつでもそのプロパティを読み取ることができます。

簡単な解決策は次のとおりです。

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;
于 2010-08-31T19:08:47.763 に答える