.NET, оборачивающий пару call / callback, чтобы казаться синхронным - PullRequest
3 голосов
/ 25 января 2010

У меня есть вызываемый сторонний COM-объект, который использует обратный вызов события, чтобы сообщить, что он выполнил свою задачу.

obj.Start();  

затем, через некоторое время, произойдет событие, сообщающее, что оно сделано.

void OperationFinished()

Я хотел бы иметь возможность выполнять эту операцию синхронно и пытался использовать AutoResetEvents для обработки этого

, например

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

и в обработчике событий:

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

но кажется, что и Set (), и WaitOne () находятся в одном потоке, поэтому он застревает. Есть ли простой способ справиться с этим?

1 Ответ

2 голосов
/ 25 января 2010

Вот быстрая мысль с макушки моей головы. Немного многословно, но не понимаю, почему это не сработает.

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...