2010-05-18 80 views
2

假设我有方法 void SomeMethod(动作回调) 此方法在后台线程中执行一些工作,然后调用回调。问题是 - 如何阻止当前线程直到回调被调用?.NET线程:如何等待其他线程完成一些任务

有一个例子

bool finished = false; 
SomeMethod(delegate{ 
finished = true; 
}); 
while(!finished) 
    Thread.Sleep(); 

但我敢肯定应该有更好的方式

+0

如果你想阻止当前线程,直到在后台线程的工作完成后,可能你只是做了当前线程,而不是在工作? – 2010-05-18 05:32:27

+0

不,不幸的是,我不能在当前线程中完成这项工作。 – 2010-05-18 05:35:19

+0

您是否考虑过在线程内部等待或使用回调/事件之后放置代码?你所描述的是一个同步操作。有没有更多的信息? – 2010-05-25 03:20:44

回答

3

可以使用的AutoResetEvent时信号你的线程完成了。

检查这个代码片段:

AutoResetEvent terminateEvent = new AutoResetEvent(false); 
    bool finished = false; 
    SomeMethod(delegate 
    { 
     terminateEvent.Set(); 
    }); 
    terminateEvent.WaitOne(); 
+0

谢谢,它确实有效。它比线程睡眠更快吗? – 2010-05-18 05:32:35

+0

当阻塞时间非常短时,自旋锁定(不断检查while循环中的标志,可能带有'Thread.Sleep')可能会更快,否则,“AutoResetEvent”是要走的路。 – 2010-05-18 05:37:15

1

检查Thread.Join()将工作

Example of this

+0

Thread.Join的问题在于其他线程在调用回调时没有完成。 – 2010-05-18 05:23:10