WPF应用程序中使用哪些线程?

5
我想了解各种应用程序中线程的使用情况,我有点惊讶于WPF应用程序有2个以上的线程(除UI线程外),这一点我没有预料到。
我按照以下步骤操作:
  1. 创建新的WPF应用程序
  2. 按下F5以调试模式启动
  3. 转到调试 -> 窗口 -> 并行堆栈
  4. 按下中断所有按钮
  5. 调查并行堆栈窗口
我期望得到一个单一的线程-UI线程,但实际上得到了3个线程:

WPF default threads

左侧最外层的线程是UI线程 - 这正是我一直期望的,但是其他两个线程用于什么?我没有创建它们 - 我只是创建了一个基本的WPF应用程序 - 没有对新项目向导生成的初始代码进行修改。
此外,如何使用上面截图中用红色箭头指示的函数?
  1. ProtocolHandler.SendThread
  2. ProtocolHandler.ReadThread

我搜索了文档,但没有找到太多关于这些的信息。我还尝试在代码后台中使用它们,但没有using语句可以添加-它们只是未被识别。


我得到了不同外观的线程(可能取决于.NET版本)。如果你从VS外部启动程序,然后附加,你仍然能看到这些线程吗? - mnistic
我刚刚尝试了一下:是的,我得到了与之前完全相同的线程。我启动了应用程序的发布版本(在VS之外),附加到进程并使用"中断所有"。在平行堆栈中发现了相同的线程。 - Igor Popov
你的 WPF 版本是什么? - mnistic
1个回答

5
ProtocolHandler 类的完整命名空间为 Microsoft.VisualStudio.DesignTools.WpfTap.Networking。从名称可以看出,它被 Visual Studio 中的设计调试工具使用(可能是允许在运行时检查/修改 UI 的工具之一)。
如果在 Visual Studio 中禁用这些工具(工具 -> 选项 -> 调试 -> 取消选中“启用 XAML 的 UI 调试工具”),你会发现不再启动这两个额外线程。

这正是我想要的!非常感谢您如此清晰地解释! - Igor Popov

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