2009-11-08 94 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

相关问题