2011-05-12 32 views
3

我得到的是一旦你用DoWork()處理程序完成你的工作,然後做一個RunWorkerCompleted(),你可以重新調用RunWorkerAsync()並讓它重新進入DoWork()處理程序,還是需要做另一個「新」操作並創建一個新的BackgroundWorker?只是想知道在這些事情發生之後是否進行了任何處置或其他清理工作,現在你不再有可行的工作人員了。BackgroundWorker:DoWork()事件處理程序完成後會死嗎?

+0

只要確保你再次調用'RunWorkerAsync'之前等待事件。 – 2011-05-12 20:36:32

回答

2

你可以撥打RunWorkerAsync所有你喜歡的。您無需創建新的BackgroundWorker對象。


唯一的限制是,你不能把它當BackgroundWorker目前正忙於一個異步操作了。所以常見的方法是:例如,當用戶單擊按鈕時,請撥打RunWorkerAsync。然後禁用按鈕,並在處理程序RunWorkerCompleted事件重新啓用它:

void DoWorkButton_Click(object sender, EventArgs e) 
{ 
    DoWorkButton.Enabled = false; 
    Worker.RunWorkerAsync(); 
} 

void Worker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    // Do some async operation. 
} 

void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    try 
    { 
     // Do some updates. 
    } 
    finally 
    { 
     DoWorkButton.Enabled = true; 
    } 
} 
相關問題