DataReceviedHandler错误,也许是线程问题

时间:2011-08-29 13:38:22

标签: c# .net multithreading if-statement serial-port

在串口的DataReceviedHandler中,我正在测试是否设置了bool。 如果不是,我将下一个块发送到串口。

布尔值由class事件设置。在图片中你可以看到程序进入if语句,虽然bool是假的。这是线程问题吗?我该怎么办?

a busy cat http://img163.imageshack.us/img163/3324/boolh.png

如果试过这个:

                lock (_syncLock)
                {
                    if (_wrEEPROM)
                    {
                        //Hier müssen die weiteren 128er Blöche übertragen werden
                        SerialControl.Port.Write(_yTestMod.CreateYModemBlock(wrEE.EEPROMar, _eepromBlockIndex), 0,
                                                 _yTestMod.CreateYModemBlock(wrEE.EEPROMar, 2).Length);
                        _eepromBlockIndex += 1;
                    }
                }

以及此事件:

        lock (_syncLock)
        {
            _eeprom = false;
            _logger = false;
            _wrEEPROM = false;
        }

但它仍无效。

1 个答案:

答案 0 :(得分:1)

锁定:

创建一个私有字段变量:

private Object _syncLock = new Object();

然后你在哪里设置或阅读你的“Flag” - 变量使用

lock(_syncLock)
{
  myFlag = true; // whatever
}

lock(_syncLock)
{
  return myFlag;
}
在你的情况下,

将事件的孔处理程序和上面显示的代码包装在这样的锁中以开始。