[英]Is the BackgroundWorker Completed event performed in background?
假設我像這樣制作一個BackgroundWorker
private void RunBackgroundWorker(object sender, DoWorkEventArgs e)
{
// Do something lengthy here
// which takes a lot of time
}
private void BackgroundWorkerCompleted(object sender, RunWorkerCompletedEventArgs)
{
System.Threading.Thread.Sleep(2000) ;
BackgroundWorker1.RunWorkerAsync() ;
}
我想問是否在“ Background”線程或主UI線程上執行BackgroundWorkerCompleted
函數的內容。 我問這個問題是因為,我正在創建一個桌面應用程序,該應用程序使用該數據庫並每隔幾秒鍾不斷更新其數據庫
它在UI線程上執行。 MSDN解釋:
您必須小心,不要在DoWork事件處理程序中操作任何用戶界面對象。 而是通過ProgressChanged和RunWorkerCompleted事件與用戶界面進行通信。
就是說,Servy在注釋中是正確的-您應該使用Timer
在一定間隔上執行代碼, 而不是 BackgroundWorker
。
我經常使用BackgroundWorker
並且可以說RunWorkerCompleted
事件肯定是在UI線程中運行的。 此外,您還可以通過在DoWork
結果根據EventArgs的字段,然后,在RunWorkerCompleted
把它從EventArgs的執行與它的一些依賴於UI的操作,提到這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.