WPF线程实践

时间:2012-03-31 00:04:14

标签: c# wpf multithreading dispatcher

我对WPF有些新鲜,但我的理解是默认情况下WPF应用程序有2个线程;一个用于UI,一个用于管理。正确的吗?

在我的MainWindow中说出自己的线程中的其他窗口。所以我创建了一个新线程,在该线程中我创建了一个Foo1的实例(定义为class Foo1 : Window)。然后创建另一个线程,并创建一个Foo2等实例(我这样做是因为每个窗口都做了一些密集的事情,也许它们应该在自己的线程上)。

我想我的问题有两个方面:

a)这是否过度,或者我应该在同一个帖子中简单地从Foo1实例化Foo2Foo3MainWindow

b)如果它不是矫枉过正,我该如何安全地更新我的UI。是否需要将各个Window中的每个内容中的UI元素更改放置到单数 UI线程中?

1 个答案:

答案 0 :(得分:1)

a)一般来说它是矫枉过正的。我见过的所有非常大的WPF应用程序都只使用一个UI线程构建,所以在一般情况下我会说它没有必要。您可能会发现使用一个特殊情况,但如果您经常使用新线程,我建议可能存在设计问题。

我过去使用过第二个UI线程,当时我的主窗口正在完成大量必须在调度程序上完成的工作,我想要一个响应式加载指示器。在这种情况下,我使用指示器在其自己的线程上创建了第二个窗口,并将其定位在顶部。但99%的时间不应该需要它。

b)这是正确的。每个窗口(实际上,每个从DispatcherObject派生的对象)都有一个Dispatcher属性,可以让您访问当前窗口的调度程序。您会发现在调用代码更新另一个窗口时,您必须获取该窗口的调度程序并调用它。