从BackgroundWorker更改控件的属性(C#)

3
我正在尝试从一个目录中加载大量的文件,并在加载时显示进度条状态,以及显示正在处理的文件的标签。
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的文本?


更新标签控件的代码是什么样子的? - Fredrik Mörk
2个回答

12

C. Ross所说,您可以直接使用Control.Invoke系列方法来实现此操作,但间接地通过处理BackgroundWorker.ProgressChanged事件可能更容易,并且可能更符合惯用方式。在后台线程上引发DoWork事件时,ProgressChanged事件会在UI线程上引发。因此,在ProgressChanged中更新文本不需要Invoke。

另外,这将使您的工作函数摆脱UI依赖性,从而使测试变得更加容易。


好的,我同意这是一个更好的答案,针对所指定的有限情况。 - C. Ross

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接