C# windows窗体的线程要求

C# windows窗体的线程要求,c#,compact-framework,apartment-state,C#,Compact Framework,Apartment State,好的,所有Windows窗体应用程序都应该在其Main()方法上方设置[STAThread]指令 然而,有一个例外。我们正在使用紧凑的框架为Windows Mobile设备编写应用程序。Compact framework甚至不支持[STAThread]指令,它只有[MTAThread]。不过,我在那里从未遇到任何问题 现在,更进一步,您还可以在成熟的windows系统上运行Compact Framework应用程序。我认为在这种情况下,将使用成熟的.NET框架 此时,我们正在运行带有MTA单元状

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

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

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

此时,我们正在运行带有
MTA
单元状态的代码,该状态在成熟的windows系统上使用windows窗体。这就引出了一个问题,如果一个紧凑的框架应用程序在一个成熟的windows操作系统上运行,为什么它不抱怨缺少
[STAThread]
指令呢?
正如我所说,它不是在正常机器上运行的windows窗体,而是一个子集。当然,也可能是某种代理正在进行,框架负责引导STA线程并为您来回编组

关于以下内容的评论:

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

由Josef编写的,似乎表明紧凑型框架表单将在MTA下愉快地滚动,但一旦您使用winforms中的基于COM的组件,并且不需要STA,您就会惊慌失措。

请参阅“不,你没有遗漏任何东西——NETCF上没有这样的属性,也没有办法强制STA的行为。MTA是唯一受支持的模式,通常在NETCF上不需要STA。"