假设我有方法 void SomeMethod(动作回调) 此方法在后台线程中执行一些工作,然后调用回调。问题是 - 如何阻止当前线程直到回调被调用?.NET线程:如何等待其他线程完成一些任务
有一个例子
bool finished = false;
SomeMethod(delegate{
finished = true;
});
while(!finished)
Thread.Sleep();
但我敢肯定应该有更好的方式
假设我有方法 void SomeMethod(动作回调) 此方法在后台线程中执行一些工作,然后调用回调。问题是 - 如何阻止当前线程直到回调被调用?.NET线程:如何等待其他线程完成一些任务
有一个例子
bool finished = false;
SomeMethod(delegate{
finished = true;
});
while(!finished)
Thread.Sleep();
但我敢肯定应该有更好的方式
可以使用的AutoResetEvent时信号你的线程完成了。
检查这个代码片段:
AutoResetEvent terminateEvent = new AutoResetEvent(false);
bool finished = false;
SomeMethod(delegate
{
terminateEvent.Set();
});
terminateEvent.WaitOne();
谢谢,它确实有效。它比线程睡眠更快吗? – 2010-05-18 05:32:35
当阻塞时间非常短时,自旋锁定(不断检查while循环中的标志,可能带有'Thread.Sleep')可能会更快,否则,“AutoResetEvent”是要走的路。 – 2010-05-18 05:37:15
如果你想阻止当前线程,直到在后台线程的工作完成后,可能你只是做了当前线程,而不是在工作? – 2010-05-18 05:32:27
不,不幸的是,我不能在当前线程中完成这项工作。 – 2010-05-18 05:35:19
您是否考虑过在线程内部等待或使用回调/事件之后放置代码?你所描述的是一个同步操作。有没有更多的信息? – 2010-05-25 03:20:44