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

C# 从BackgroundWorker C更改控件的属性#,c#,backgroundworker,C#,Backgroundworker,我试图从一个目录中加载一组文件,在加载过程中,会显示一个进度条状态,以及一个显示正在处理哪个文件的标签 private void FileWorker_DoWork(object sender, DoWorkEventArgs e) { for (int i = 0; i < Files.Length; i++) { Library.AddSong(Files[i]); FileWorker.ReportProgress(i); }

我试图从一个目录中加载一组文件,在加载过程中,会显示一个进度条状态,以及一个显示正在处理哪个文件的标签

private void FileWorker_DoWork(object sender, DoWorkEventArgs e)
{
    for (int i = 0; i < Files.Length; i++)
    {
        Library.AddSong(Files[i]);
        FileWorker.ReportProgress(i);
    }
}
private void FileWorker\u DoWork(对象发送方,DoWorkEventArgs e)
{
for(int i=0;i
目前,它可以正常处理所有内容,进度条也可以正常显示状态,但当我试图更改标签的文本(lblfile.text)时,它表示无法更改其他线程上的控件。有没有办法从Fileworker更改lblfile.text的文本?

您需要使用和。
告诉你怎么做。 以下是。

作为示例,您可以直接使用Control.Invoke方法族来执行此操作,但通过处理BackgroundWorker.ProgressChanged事件间接执行此操作可能更容易,也可能更惯用。在后台线程上引发DoWork时,在UI线程上引发ProgressChanged。因此,在ProgressChanged中更新文本不需要调用


此外,这使您的辅助功能不受UI依赖关系的影响,从而使测试更容易。

更新label控件的代码是什么样子的?很好。我同意这是一个更好的答案,因为具体情况有限。