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

标签 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);
    }
}

目前它可以正确处理所有内容,并且进度条可以正确显示状态,但是当我尝试更改标签的文本 (lblfile.text) 时,它说它无法更改不同线程上的控件。有没有办法从 Fileworker 更改 lblfile.text 的文本?

最佳答案

作为C. Ross says ,您可以使用 Control.Invoke 系列方法直接执行此操作,但通过处理 BackgroundWorker.ProgressChanged 事件间接执行此操作可能更容易,而且可能更符合惯用方式。在后台线程上引发 DoWork 时,在 UI 线程上引发 ProgressChanged。因此,在 ProgressChanged 中更新您的文本不需要调用。

此外,这使您的工作函数不受 UI 依赖性的影响,这将使其更易于测试。

关于c# - 从 BackgroundWorker C# 更改控件的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1697784/

相关文章:

c# - BackgroundWorker.CancelAsync() 导致 "BackgroundWorker does not support cancellation."错误

vb.net - 由多个后台 worker 处理的单个任务?

c# 业务应用程序中的不可变类

backgroundworker - 我可以使用过多的后台工作线程吗?

c# - WPF TextBox 事件 TextChanged PreviewTextInput 不触发

c# - 关于 MVC 中的 SLUG

c# - Xamarin 中的 BackgroundWorker 与 Android 服务

c# - 如何调试从 BackgroundWorker 调用的代码中未处理的异常?

c# - WPF 如何更改页面中的属性?

c# - Regex.Match 在 C# 中的双辅音