加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

从BackgroundWorker C#更改控件的属性

发布时间:2020-12-16 00:12:22 所属栏目:百科 来源:网络整理
导读:我正在尝试从目录中加载一堆文件,并在加载时显示进度条状态,以及显示正在处理哪个文件的标签. private void FileWorker_DoWork(object sender,DoWorkEventArgs e){ for (int i = 0; i Files.Length; i++) { Library.AddSong(Files[i]); FileWorker.ReportPro
我正在尝试从目录中加载一堆文件,并在加载时显示进度条状态,以及显示正在处理哪个文件的标签.

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依赖性的影响,从而使测试更容易.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读