1

AFAIK,所有 Windows 窗体应用程序都应在其方法[STAThread]之上设置指令。Main()

但是,有一个例外。我们正在使用 Compact Framework 为 Windows Mobile 设备编写应用程序。紧凑的框架甚至不支持[STAThread]指令,它只有[MTAThread]. 不过,我在那里从未遇到任何问题。

现在,更进一步,您还可以在完整的 Windows 系统上运行 Compact Framework 应用程序。我认为在这种情况下将使用完整的 .NET 框架。

那时,我们正在运行带有MTA公寓状态的代码,它在完整的 Windows 系统上使用 Windows 窗体。这让我想到一个问题,如果一个紧凑的框架应用程序运行在一个成熟的 Windows 操作系统上,为什么它不抱怨缺少[STAThread]指令?

4

1 回答 1

1

根据这个答案,我想说它实际上不是在普通机器上运行的 Windows 窗体,而是一个子集。当然,也可能是某种代理正在进行,框架负责引导 STA 线程并为您来回编组。

对此问题的评论:

简单的 CF 应用程序无需修改即可在桌面上运行,这是众所周知的。但是使用 CF-only API(即 aygshell 相关)的应用程序将无法运行。STAThread 编译选项只能在编译期间使用(AFAIK)。如果使用该选项编译 DLL,我可以想象它不会在桌面上运行。对于 Web 浏览器组件,您不需要加载此硬编码,而是从代码中加载,然后加载完整的框架或 CF。CF 表格被硬编码为 MTA。如果加载了需要 STA 的 COM,它将给出异常。

Josef 认为,紧凑的框架表单似乎可以在 MTA 下愉快地运行,但一旦您使用 Winforms需要 STA 的基于 COM 的组件,就会吓坏了。

于 2017-01-05T14:30:14.017 回答