1

将空闲的 Windows 窗体应用程序、WPF 应用程序或 Windows 应用商店应用程序中断到 Visual Studio(调试->全部中断)时,线程窗口显示它正在主线程上运行(= UI 线程对吗?)。调试单击事件处理程序时,前两个应用程序仍在主线程上执行,而 Windows 应用商店应用程序在工作线程上执行。这个线程实际上是 UI 线程吗?如果是,为什么它被标记为 Worker Thread?为什么前两个应用程序和 Windows Store 应用程序之间存在差异,这与 Windows 8 中的“所有异步”有关吗?

4

1 回答 1

2

是的,Windows 应用商店应用的运行方式与常规桌面应用大不相同。在底层,它们是进程外 COM 服务器,是与常规 Windows EXE 非常不同的激活模型。它们由 RPCSS 服务启动,启动线程调用 RoInitialize() 使自己成为 MTA 线程。WinRT 管道然后创建一个 STA 线程,该线程成为 UI 小工具和调度程序循环的所在地。这看起来像调试器中的工作线程。

所有这些都没有很好的记录,不知何故,CLR 鞋拔本身进入了这个激活模型。隐藏在 CLR 中内置的语言项目中且完全未记录的详细信息。你不应该担心它。这似乎可行,我很少看到程序员提出与 COM 线程模型作斗争的问题。

于 2012-09-22T13:02:19.037 回答