我有一个第三方COM对象,我调用它使用事件回调来表示它已经完成了它的任务。
obj.Start();
然后有一段时间它会举起一个事件来表明它已经完成。
void OperationFinished()
我希望能够同步执行此操作并尝试使用AutoResetEvents来处理此操作
e.g。
obj.Start();
m_autoReset.WaitOne();
并在事件处理程序中:
void OperationFinished()
{
m_autoReset.Set();
}
但似乎Set()和WaitOne()都在同一个线程上,因此它被卡住了。有没有一种简单的方法来处理这个问题?
答案 0 :(得分:2)
这是我头脑中的一个快速思考。有点冗长,但不明白为什么不会这样做。
private readonly object m_locker = new object();
private volatile bool m_complete;
。
lock (m_locker)
{
m_complete = false;
}
obj.Start();
while (true)
{
bool complete
lock (m_locker)
{
complete = m_complete;
}
if (complete)
{
break;
}
Thread.Sleep(500); // Give a half-second wait to see if we're done. YMMV.
}
。
void OperationFinished()
{
lock (m_locker)
{
m_complete = true;
}
}