我有一个使用 Visual Studio 2010 的 WinForms VB 应用程序。我使用的是 WPF DocumentViewer,因此它由 ElementHost 控件托管。在我的 AppMain_Form.Designer.vb 中,执行后续(生成)语句时:
Me.rv_doc_vwr_host = New System.Windows.Forms.Integration.ElementHost()
我得到一个异常(我必须为调试器启用 CLR 异常):
“调用线程必须是 STA,因为很多 UI 组件都需要这个。”
但是,在我对这个问题的研究中,我发现了以下内容:
1) 默认情况下,Windows 窗体应用程序是单线程的。
2) Main 过程是为 Windows 窗体应用程序自动生成的,它是隐藏的。
3) Main 过程可以手动编码,但这需要禁用应用程序框架,我认为这对于 Windows 窗体应用程序是相当必要的。
那么,如果 Windows 窗体应用程序默认为 SingleThreaded,为什么会出现此异常?如果没有,如果 Main 过程被隐藏,我如何将其标记为 STAThread?为什么我必须启用 CLR 异常才能捕获它?在启用 CLR 异常之前,这并没有出现在我的测试中,但是当我在 Visual Studio 之外运行我的应用程序时,它简要显示了一个关于创建主窗体的异常框,但在我获得任何详细信息之前,它已被我的闪屏,然后是我的主窗体。之后该应用程序正常运行。但是,我无法部署它,每次启动时都会显示异常消息。