这是我的代码示例
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在其他非静态类中设置非静态字段并引用它可以解决问题。但这看起来很糟糕,并没有回答这个话题。