[英]c# Thread-safe control DataBindings to a property modified by a BackgroundWorker
[英]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依賴性的影響,從而使測試更容易。
您需要使用InvokeRequired和BeginInvoke 。
此頁面告訴您如何執行此操作。 這是MSDN頁面 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.