首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >运行任务时更新UI

运行任务时更新UI
EN

Stack Overflow用户
提问于 2010-11-19 18:33:17
回答 5查看 624关注 0票数 0

我有以下代码:

代码语言:javascript
复制
        progressBar1.Minimum = 0;
        progressBar1.Maximum = Results.Count;

        foreach (MyClass cls in Results)
        {                
              progressBar1.Value += 1;

              // Go to DB and get large quantity of data
              cls.GetHistoryData();

        }

我想要做的是将处理转移到另一个线程,以便progressBar1正确更新。我发现了一个article,它暗示我应该能够在进度条上使用Invoke方法,但似乎没有。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-19 18:38:54

如果将进度条绑定到数据属性,则不需要手动切换线程上下文。WPF绑定引擎将自动为您完成此操作。

代码语言:javascript
复制
<ProgressBar Value={Binding Progress} />

然后在你的线程中:

代码语言:javascript
复制
foreach (MyClass cls in Results)
{                
      // databinding will automatically marshal to UI thread
      this.Progress++;
      cls.GetHistoryData();
}

在大多数情况下,这比使用Dispatcher.InvokeBackgroundWorker自己编组要干净得多,也不容易出错

票数 2
EN

Stack Overflow用户

发布于 2010-11-19 18:36:45

你应该检查BackgroundWorker类。它支持进程,并正确处理线程之间的通信。

票数 2
EN

Stack Overflow用户

发布于 2010-11-19 18:37:25

您可以像这样启动一个新线程:

代码语言:javascript
复制
Thread t1 = new Thread(methodnametocall);
   t1.start();

void methodnametocall()
{
   this.Invoke((MethodInvoker)delegate
   {

        control to update;
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4224146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档