簡體   English   中英

是否在后台執行BackgroundWorker Completed事件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM