.NET包装一个调用/回调对以显示同步

时间:2010-01-25 05:01:05

标签: .net callback asynchronous

我有一个第三方COM对象,我调用它使用事件回调来表示它已经完成了它的任务。

obj.Start();  

然后有一段时间它会举起一个事件来表明它已经完成。

void OperationFinished()

我希望能够同步执行此操作并尝试使用AutoResetEvents来处理此操作

e.g。

obj.Start();
m_autoReset.WaitOne();

并在事件处理程序中:

void OperationFinished()
{
    m_autoReset.Set();
}

但似乎Set()和WaitOne()都在同一个线程上,因此它被卡住了。有没有一种简单的方法来处理这个问题?

1 个答案:

答案 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;
    }
}