【发布时间】:2017-01-04 17:54:18
【问题描述】:
我为 Windows Compact Framework 3.5 做了一个应用程序,它似乎工作正常。
编译后,我的电脑上会创建一个.exe 文件。 直到最近,我实际上还可以在我的计算机上运行这个 exe 文件。 (不使用模拟器)
但最近我注意到我的应用程序只能在移动设备上运行。当我尝试在我的台式计算机上运行它时,我收到一条奇怪的错误消息,表明我应该使用 [STAThread] 指令为 Main() 方法运行我的应用程序。
但是,对于我的移动设备,这不是必需的,一切正常。事实上,我什至无法将[STAThread] 添加到源代码中,因为紧凑的框架不支持它。 添加它会导致编译错误。
不幸的是,这也是现在的问题。 我很想添加一些条件代码来评估它是在 Windows CE 还是 Windows 桌面上运行。 当它在桌面上运行时,它应该以STAThread 模式启动代码。但是,我找不到添加此类代码的方法,因为它无法编译。它总是归结为编译器不知道 STAThread 是什么。
有没有办法或技巧来处理这个问题?
对我来说一个好的解决方法是用不同的方式编译它,也许是在我为台式计算机编译它时选择不同的目标平台。但是,我目前无法这样做。有什么想法吗?
【问题讨论】:
-
直到最近 - 所以发生了一些变化。您正在运行什么操作系统,对应用程序进行了哪些更改,您能否将其与最近的更新相匹配?
-
@HenkHolterman 实际上,我开始使用 WebBrowser 组件。在我看来,好像移动设备上的 WebBrowser 实现可以在 MTA 中正常运行,而完整的 Windows 系统的 WebBrowser 组件需要 STA。这确实是这个问题的原因(我想把这个排除在这个问题的范围之外,因为它只会让事情变得更复杂):)
-
简单的 CF 应用程序无需修改即可在桌面上运行,这是众所周知的。但是使用仅限 CF 的 API(即 aygshell 相关)的应用程序将无法运行。 STAThread 编译选项只能在编译期间使用(AFAIK)。如果使用该选项编译 DLL,我可以想象它不会在桌面上运行。对于 Web 浏览器组件,您无需加载此硬编码,而是从代码中加载,然后加载完整的框架或 CF 框架。 CF 表格被硬编码为 MTA。如果加载了需要 STA 的 COM,则会出现异常。
标签: c# compact-framework