繁体   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