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