我正在尝试从目录加载一堆文件,在加载时显示进度条状态以及显示正在处理哪个文件的标签。
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 的文本?
As C.罗斯 说 https://stackoverflow.com/questions/1697784/changing-the-property-of-a-control-from-a-backgroundworker-c/1697792#1697792,您可以直接使用 Control.Invoke 系列方法来执行此操作,但通过处理 BackgroundWorker.ProgressChanged 事件间接执行此操作可能更容易,而且可能更惯用。 DoWork 在后台线程上引发,而 ProgressChanged 在 UI 线程上引发。因此,在 ProgressChanged 中更新文本不需要 Invoke。
此外,这可以让您的工作函数摆脱 UI 依赖,从而更容易测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)