仅在值可用时返回该值,否则等待该值...c#
本文关键字:等待 返回 | 更新日期: 2023-09-27 18:28:38
只有在值可用时才返回该值。如果我使用一个条件来检查null条件,它将抛出一个异常。"表示并非所有代码路径都返回值"
internal PinMessage()
{
obj.PinsAvailable.ObserveOn(SynchronizationContext.Current).Subscribe(HandlePinsAvailable);
}
private void HandlePinsAvailable(byte[] pinBytes)
{
pinmesssage = Encoding.ASCII.GetString(pinBytes);
}
internal string GetPinMessage(string AccoutNumber)
{
string pinstring = string.Empty;
obj.SendPinRequest(AccoutNumber);
pinstring = pinmesssage;
return pinstring;
}
private string _pinMessage;
public string pinmesssage
{
get//Not all Code paths return a value
{
if (_pinMessage != null)
return _pinMessage;
}
set { _pinMessage = value; }
}
您得到这个编译错误是因为在_pinMesSafe为null的情况下没有返回任何内容。您需要从Access返回一些内容,或者在这种情况下返回,或者抛出异常。
private string _pinMessafe;
public string pinmesssage
{
get {
if (_pinMessafe != null)
return _pinMessafe;
}
set { _pinMessafe = value; }
}
当它被调用时,你必须返回一些东西,你不能只是把一个方法调用挂起。你可以做的是自己强制检查:
private string _pinMessafe;
public string pinmesssage
{
get {
return _pinMessafe ?? GetMessage()
}
set { _pinMessafe = value; }
}
在这种情况下,GetMessage()
必须负责返回消息。根据你提供的信息,很难给出更详细的答案。你应该编辑你的代码,使其更可读(包括英语拼写错误),并在需要时添加信息。
这不是"最佳"做法,但会起作用,让消费者等到生产者写入变量。
private string _pinMessafe;
object locker = new object();
public string pinmesssage
{
get
{
string x = null;
while(x == null) {
lock(locker) { x = _pinMessafe ; }
Thread.Sleep(1);
}
return x;
}
set { lock(locker) { _pinMessafe = value; } }
}