WPF应用的19个线程

WPF应用的19个线程,wpf,Wpf,我刚刚创建了一个新的WPF应用程序,它有大约5个窗口,并使用Xceed数据网格。查看任务管理器后,我发现这个小应用程序有19个线程在运行 这是正确的吗?我希望WPF框架使用2-3个线程,而不是19个线程。 还是我做错了什么?首先,不是19岁。 当运行“Hello,World!”WPF应用程序时,我在任务管理器中看到10个线程。当使用Visual Studio调试器运行同一应用程序时,它使用19。因此,首先,从调试器中计算出作为开销添加的9个 现在进入第10个 根据MSDN杂志一篇名为“WPF”的

我刚刚创建了一个新的WPF应用程序,它有大约5个窗口,并使用Xceed数据网格。查看任务管理器后,我发现这个小应用程序有19个线程在运行

这是正确的吗?我希望WPF框架使用2-3个线程,而不是19个线程。
还是我做错了什么?

首先,不是19岁。

当运行“Hello,World!”WPF应用程序时,我在任务管理器中看到10个线程。当使用Visual Studio调试器运行同一应用程序时,它使用19。因此,首先,从调试器中计算出作为开销添加的9个

现在进入第10个

根据MSDN杂志一篇名为“WPF”的文章,WPF从两个线程开始:

所有WPF应用程序都以 两个重要线程,一个用于渲染一个用于管理用户界面。渲染线程 是在中运行的隐藏线程 背景,所以唯一的线程 您通常处理的是UI 线

但是根据,在所有托管应用程序中都有很多基本线程,无论是否为WPF:

有不同类型的.NET 线程:终结器、GC、调试器、, 计时器、线程池、主线程和 背景线程。但并非全部 管理与.NET相关的线程

从WPF中的2开始,添加GC和终结器,直到4。添加调试器线程(所有托管应用程序即使在未调试时也有一个)以获得五个。添加计时器以到达六个

在VS外部启动WPF应用程序后,将调试器附加到WPF应用程序,我可以看到线程池中有两个工作线程。这可能是最低要求。这将使我的应用程序最多八个

有两个我无法准确解释,但它们很可能是用于互操作的COM线程(它们肯定不是托管线程)。我引用的文章讨论了更多这些


但这个故事的真正寓意是,不要担心他们。如果一个普通的“Hello,World!”应用程序使用10,那就是你的基线只需担心超出此最小值时创建的线程。

任何windows应用程序都是如此。如果您正在显示一个窗体,那么10几乎是最小值。一个窗体需要10个线程做什么?消息泵需要一个。另外9个是干什么的?听起来确实很奇怪。我希望一个普通的应用程序有两个线程,后台工作人员等有额外的线程,但不是19个。