WPF线程实践

本文关键字:线程 WPF | 更新日期: 2023-09-27 18:29:44

我对WPF有些陌生,但我的理解是,默认情况下,WPF应用程序有2个线程;一个用于UI,一个用于管理。对的

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

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

a) 这是过分了,还是我应该简单地在同一线程中从MainWindow实例化Foo1Foo2Foo3

b) 如果不是过度使用,我该如何安全地更新我的UI。对各个Window中的UI元素的更改是否需要放在Dispatcher中才能进入单数UI线程?

WPF线程实践

a)一般来说,这是一种过度杀戮。我看到的所有大型WPF应用程序都是用一个UI线程构建的,所以在一般情况下,我认为这是没有必要的。你可能会发现使用一个特殊情况,但如果你一直在使用新线程,我建议可能存在设计问题。

我曾经使用过第二个UI线程,当时我的主窗口正在做很多必须在调度器上完成的工作,我想要一个响应加载指示器。在这种情况下,我在带有指示器的线程上创建了第二个窗口,并将其放置在顶部。但99%的时间都不需要它。

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