【问题标题】:What threads are used in a WPF application?WPF 应用程序中使用了哪些线程?
【发布时间】:2018-06-30 18:46:50
【问题描述】:

我希望了解各种应用程序中的线程使用情况,我有点惊讶WPF 应用程序还有 2 个线程(除了 UI 线程) 我没想到。

我按照以下步骤操作:

  1. 创建新的 WPF 应用
  2. F5 以调试模式启动它
  3. 转到Debug -> Windows -> Parallel Stacks
  4. Break All按钮
  5. 调查Parallel Stacks 窗口

我希望得到一个线程 - UI 线程,但得到了 3 个线程:

最左边的线程是 UI 线程 - 这是我一直期望的,但是 另外 2 个线程是做什么用的?我没有创建它们 - 我只是制作了一个准系统 WPF 应用程序 - 没有修改新项目向导生成的初始代码。

还有如何使用上面截图中红色箭头指示的功能

  1. ProtocolHandler.SendThread
  2. ProtocolHandler.ReadThread

我查找了文档,但没有找到太多关于这些的信息。我也尝试在后面的代码中使用它们,但没有要添加的 using 语句 - 它们只是无法识别。

【问题讨论】:

  • 我得到了不同的线程(可能取决于 .NET 版本)。如果你从 VS 外部启动程序,然后附加,你还能看到线程吗?
  • 我刚试过:是的,我得到的线程与以前完全相同。我从 VS 外部启动了该应用程序的发布版本,附加到进程并使用了全部中断。并行堆栈中的相同线程。
  • 你的 WPF 版本是多少?

标签: c# wpf multithreading threadpool


【解决方案1】:

ProtocolHandler 类的完整命名空间是Microsoft.VisualStudio.DesignTools.WpfTap.Networking。顾名思义,它被 Visual Studio 的设计调试工具使用(可能是允许在运行时检查/修改 UI 的工具)。

如果您在 Visual Studio 中禁用这些工具(工具 -> 选项 -> 调试 -> 取消选中“为 XAML 启用 UI 调试工具”),您将看到两个额外的线程将不再启动。

【讨论】:

  • 这正是我想要的!非常感谢你解释得这么清楚!
猜你喜欢
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 2011-08-09
  • 2015-05-23
  • 2018-09-29
相关资源
最近更新 更多