假設我有方法 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