在串口的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;
}
但它仍无效。
答案 0 :(得分:1)
锁定:
创建一个私有字段变量:
private Object _syncLock = new Object();
然后你在哪里设置或阅读你的“Flag” - 变量使用
lock(_syncLock)
{
myFlag = true; // whatever
}
或
lock(_syncLock)
{
return myFlag;
}
在你的情况下,将事件的孔处理程序和上面显示的代码包装在这样的锁中以开始。