C# Windows窗体、WPF和Windows应用商店应用程序之间线程模型的差异

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

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

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


所有这些都是非常糟糕的记录,不知何故,CLR鞋号角本身进入这个激活模型。隐藏在CLR中内置的语言项目中且完全没有文档记录的详细信息。你不应该为此担心。这似乎是可行的,我看到程序员很少有问题与COM线程模型作斗争。

您是在C#(或VB.NET或C++)应用程序或JavaScript应用程序的上下文中提问的?它们的加载和运行方式非常不同;在一个C#app.Ah COM的环境中,我应该想到。惊讶地发现“UI线程”被标记为“工作线程”。