gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:35:15 25 4
gpt4 key购买 nike

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

obj.Start();  

然后稍后它会引发一个事件说它已完成。

void OperationFinished()

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

例如

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

在事件处理程序中:

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

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

最佳答案

这是我的一个快速想法。有点冗长,但不明白为什么这不起作用。

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

关于.NET 包装调用/回调对以显示同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2130286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com