在两个线程内访问串行连接状态

时间:2010-08-31 19:04:39

标签: c#

我正在尝试设置另一个当前检查被引用对象状态的线程。主线程是运行程序并处理串行连接状态的。第二个线程需要访问连接状态以继续发送命令并从缓冲区接收命令。这可能吗?

1 个答案:

答案 0 :(得分: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;