簡體   English   中英

從BackgroundWorker C#更改控件的屬性

[英]Changing the property of a control from a 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的文本?

正如C. Ross所說 ,您可以使用Control.Invoke方法系列直接執行此操作,但通過處理BackgroundWorker.ProgressChanged事件間接執行此操作可能更容易 - 而且可能更為慣用。 在后台線程上引發DoWork時,會在UI線程上引發ProgressChanged。 因此,在ProgressChanged中更新文本不需要調用。

此外,這可以使您的工作者功能不受UI依賴性的影響,從而使測試更容易。

您需要使用InvokeRequiredBeginInvoke
此頁面告訴您如何執行此操作。 這是MSDN頁面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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