2009-11-08 93 views
3

我試圖從一個目錄中加載一堆文件,並在加載時顯示進度欄狀態以及顯示正在處理哪個文件的標籤。從BackgroundWorker C更改控件的屬性#

private void FileWorker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    for (int i = 0; i < Files.Length; i++) 
    { 
     Library.AddSong(Files[i]); 
     FileWorker.ReportProgress(i); 
    } 
} 

在它正確處理一切的那一刻,和進度條顯示狀態正常,但是當我試圖改變標籤的文本(lblfile.text)它說,它不能改變在不同的線程控制。有沒有辦法從Fileworker中更改lblfile.text的文本?

+0

更新標籤控件的代碼是怎樣的? – 2009-11-08 20:28:11

回答

11

作爲C. Ross says,您可以直接使用Control.Invoke方法系列來做到這一點,但它可能更容易 - 而且可能更通俗 - 通過處理BackgroundWorker.ProgressChanged事件間接完成此操作。雖然DoWork在後臺線程上引發,但ProgressChanged在UI線程上引發。因此,更新ProgressChanged中的文本不需要Invoke。

此外,這使您的工作人員功能免於UI依賴性,這將使測試更容易。

+0

良好的通話。我同意這是一個更好的答案,針對有限的情況。 – 2009-11-08 22:14:26

+0

+1爲「更容易測試」部分 – 2012-06-01 16:10:36

相關問題