我有一個我已經設置好的後臺工作器,我想在完成後重新啓動它。也就是說,在DoWork()完成後,如果結果不成功,我想再次從RunWorkerCompleted()處理程序中調用RunWorkerAsync()。當我在RunWorkerCompleted()中時,能否確定IsBusy = false?我可以在BackgroundWorker的RunWorkerCompleted()中調用RunWorkerAsync()嗎?
例如:
void myThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if ((e.Error == null) && !e.Cancelled && (bool)e.Result)
// do stuff
else
myThread.RunWorkerAsync();
}
我似乎無法找到任何地方的這種行爲確認。
Hans Passant在這裏的答案(https://social.msdn.microsoft.com/Forums/vstudio/en-US/ad9a9a02-8a11-4bb8-b50a-613bcaa46886/backgroundworkerisbusy-question)是相當不錯的確認。 – 2014-11-20 20:03:41
有趣。它是有道理的,但你不想在後臺線程上改變一個潛在的UI綁定屬性。 – 2014-11-20 20:10:45
沒錯。儘管從這裏引用的文檔(http://stackoverflow.com/a/2806824/304620)看來,RunWorkerCompleted()將在UI線程上被調用,從而允許在其中進行這種操作。我只是不清楚IsBusy是否已被設置爲false,或者在RunWorkerCompleted()完成之前可能保持爲true。 – 2014-11-20 20:24:44