我產生了多個backgroundworkerthreads,並希望我的主線程等待,直到所有完成。解決方法是在每次生成BackgroundWorker線程時將項目添加到列表中,並在RunWorkerCompleted中將其刪除。但是,如何將列表作爲參數傳遞給RunWorkerCompleted?主線程等待多個backgroundworker線程來完成
FuncA()
{
foreach()
{
/* add an item to the list */
_bw.RunWorkerAsync();
}
m_event.WaitOne(); /* Main thread waits here */
}
static bw_DoWork()
{
}
static bw_RunWorkerCompleted()
{
/* delete item from list */
/* if list is empty signal m_event.Set() */
}
你不想阻塞主線程。這會凍結你的用戶界面。另外,順便說一句,它會阻止'RunWorkerCompleted'發射。 – Servy
你能解釋一下,如果主線程被阻塞,RunWorkerCompleted將不會被觸發嗎? – user759913
BGW會將完成的事件封送到主線程,因爲它被阻塞,所以無法處理請求,直到當前請求結束。在BGW完成事件運行之前它不會完成。僵局。 – Servy