使用哪个调度程序?窗口或控件的?

时间:2009-10-11 19:00:51

标签: .net wpf multithreading dispatcher

到目前为止,当我想从非UI线程更新UI控件时,我使用了如下语法:

Dispatcher.Invoke(DispatcherPriority.Normal,
                  new Action(()=>Label1.Content="New Content"));

现在我正在阅读更多关于它的内容我一直在寻找以下语法:

Label1.Dispatcher.Invoke(//same arguments;

后者更好吗?为什么我会选择一种方法而不是另一种呢?

1 个答案:

答案 0 :(得分:6)

我个人会将这个用于控件本身,因为即使知道包含窗口,您也不必担心。

但是,我不认为这很重要 - 至少在正常的Win32中,单个窗口中的所有控件都应该由单个UI线程“拥有”。我希望这也能延续到WPF。 (在某些情况下,这不适用,当一个窗口在另一个窗口中重新定位时,但这种情况非常罕见。)