这是我的代码示例
internal static class Communication
{
...
private static byte _lastAnswer;
...
static void Serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
lock (SerialDataLock)
{
...
_lastAnswer = data[0];
...
}
}
}
}
Serial_DataReceived
是SerialPort.DataReceived
事件的处理程序,数据是从串行端口抓取的本地字节数组。问题出在_lastAnswer
. 调试器显示有时它未分配,有时它已分配但在块的末尾突然返回到它的先前值。
例如,我尝试通读_lastAnswer
主线程中的公共属性
public static byte LastAnswer
{
get
{
Program.DataRecievedEvent.Reset();
byte rtn = _lastAnswer;
_lastAnswer = ErrorCode;
Debug.Assert(rtn!=0xff);
_lastAnswer = 0xff; //return member to default value
return rtn;
}
}
Assert
不抛出任何异常,但 Main 中的下一个块if (answer == 0xff)
返回 true
一天后,我发现_lastAnswer
在其他非静态类中设置非静态字段并引用它可以解决问题。但这看起来很糟糕,并没有回答这个话题。