WPF中的SwingUtilities.invokeLater等效方法。

3

在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相当的等效功能?

2个回答

10
Dispatcher.BeginInvoke(
   new Action(() => {
      label.Text = "Foo"
   })
);

可能更接近于invokeLater的语法。


请原谅我的初学者问题,这个程序在单独的线程中运行吗? - GETah
不,它在与WPF UI相同的线程中运行。 - parapura rajkumar
好的,谢谢。我明天会尝试一下,并会带回一些反馈 :) - GETah
@parapurarajkumar 是的,它在UI线程中运行,但这可以是一个单独的线程(来自当前线程)。这是Dispatcher的主要原因。 - Kendall Frey

1
我非常确定答案是:没有(除了Dispatcher,我认为它会对你有很大帮助)。
关于你的代码,我的评论是:线程不是必要的。只需使用
Dispatcher.Invoke(...)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接