WinForms应用程序

时间:2016-10-14 22:31:39

标签: winforms sta elementhost

我有一个使用Visual Studio 2010的WinForms VB应用程序。我使用的是WPF DocumentViewer,因此它由ElementHost控件托管。在我的AppMain_Form.Designer.vb中,当执行follopwing(生成)语句时:

Me.rv_doc_vwr_host = New System.Windows.Forms.Integration.ElementHost()

我得到一个异常(我必须为调试器启用CLR异常):

“调用线程必须是STA,因为许多UI组件都需要这个。”

然而,在我对此问题的研究中,我发现了以下内容:

1)Windows Forms应用程序默认为SingleThreaded。

2)为Windows窗体应用程序自动生成Main过程,并将其隐藏。

3)主程序可以手动编码,但这需要禁用应用程序框架,我认为这对Windows窗体应用程序来说是非常必要的。

那么,如果Windows窗体应用程序默认为SingleThreaded,为什么会发生此异常?如果没有,如果隐藏了主程序如何将其标记为STAThread?为什么我必须启用CLR异常来捕获它?在启用CLR异常之前,这并没有出现在我的测试中,但是当我在Visual Studio之外运行我的应用程序时,它显示了一个关于创建主窗体的简要框,但在我得到任何细节之前,它被我的替换。启动画面,然后我的主要形式。该应用程序在此之后正常工作。但是,我无法在每次启动时显示异常消息进行部署。

0 个答案:

没有答案