【发布时间】:2013-08-22 20:49:45
【问题描述】:
在get set 属性中,只有在设置了值之后才返回值。我使用了响应式库并订阅了它在不同线程上运行的消息。当引发事件并设置值时,捕获该值并返回。
internal PinMessage()
{
obj.PinsAvailable.ObserveOn(SynchronizationContext.Current).Subscribe(HandlePinsAvailable);
}
private void HandlePinsAvailable(byte[] pinBytes)
{
pinmesssage = Encoding.ASCII.GetString(pinBytes);
}
public void Readvalue(object stringobj)
{
pinmesssage = (string)stringobj;
}
internal string GetPinMessage(string AccoutNumber)
{
string pinstring = string.Empty;
obj.SendPinRequest(AccoutNumber);
t1.Join();
pinstring = pinmesssage;
return pinstring;
}
private string _pinMessafe;
public string pinmesssage
{
get
{
//Get value only when the property is set
return _pinMessafe;
}
set { _pinMessafe = value; }
}
【问题讨论】:
-
问题是什么?
-
如果是字符串,只检查
_pinMessafe是否为空/空,如果为假则返回。 -
@tnw 假设你检查了它并且它不为空,并且在你返回它之前,另一个线程将它设置为空。
-
我从设备获取 pinmesssage,当我获取数据时 GetPinMessage 返回 null。它不是在等待 pin 消息。
-
您正在尝试使用 Rx 执行同步代码。那不是它的用途。您需要将此代码重构为异步的。一个可观察的和多个对 pin 消息的请求之间也存在严重的脱节。您需要将它们配对。
标签: c# multithreading get set system.reactive