我注意到,如果事件觸發得太快,我的代碼有時會不同步。我想知道是否有更好的方法。在正常情況下,DeviceOpenedEvent在將線程告訴WaitDene的TestDevice方法後觸發,但在某些情況下,在線程有機會等待之前事件被觸發。同步事件
protected AutoResetEvent TestAutoResetEvent = new AutoResetEvent(false);
public EventEnum WaitForEvent = EventEnum.None;
bool TestDevice()
{
OpenDevice();
WaitForEvent = EventEnum.DeviceOpened;
TestAutoResetEvent.WaitOne();
WaitForEvent = EventEnum.NoWait;
//Continue with other tests
}
void DeviceOpenedEvent()
{
if (WaitForEvent == EventEnum.DeviceOpened)
TestAutoResetEvent.Set();
}
在正常情況下,它看起來像這樣:
- 打開設備
- 了WaitOne()
- DeviceOpenedEvent發生
- 集()
這是我有時看到我的日誌:
- 打開設備
- DeviceOpenedEvent發生
- 了WaitOne()這裏基本上停留永遠
不應該'OpenDevice'方法指定設備何時打開(而不是'TestDevice'方法)? – 2011-06-09 16:55:16
OpenDevice是一個異步方法調用。 TestDevice在設備上執行一系列操作,例如打開,鎖定,打開電源,關閉電源。 – Robert 2011-06-09 16:59:49