在WPF UI元素中,只允许在UI调度程序线程上进行更新。因此,尝试从单独的线程更新UI元素将最终出现异常。 我在网上找到解决这个问题的唯一方法就是:
ThreadStart start = delegate(){
Dispatcher.Invoke(DispatcherPriority.Normal, new Action...
};
new Thread(start).Start();
Java使用SwingUtilities.invokeLater方法来做同样的事情。
我的问题是:是否有专门的WPF实用程序类与Java SWING SwingUtilities.invokeLater等效?
答案 0 :(得分:10)
Dispatcher.BeginInvoke(
new Action(() => {
label.Text = "Foo"
})
);
可能更接近invokeLater语法
答案 1 :(得分:1)
我很确定答案是:没有没有(除了Dispatcher,我认为它会对你有很多帮助)。
对您的代码发表评论:线程不是必需的。只需使用
Dispatcher.Invoke(...)
答案 2 :(得分:-1)
**我认为你要使用这种方法:
Application.DoEvents()
当您想要将线程的更改反映到窗体表单元素而不处理线程时空闲表单时,此方法很有用**