Требуется атрибут STRhread исключения CLR для ElementHost в приложении WinForms
У меня есть приложение WinForms VB, использующее Visual Studio 2010. Я использую WPF DocumentViewer, поэтому он размещается в элементе управления ElementHost. В моем AppMain_Form.Designer.vb, когда выполняется оператор follopwing (сгенерированный):
Me.rv_doc_vwr_host = New System.Windows.Forms.Integration.ElementHost()
Я получаю исключение (которое я должен был включить исключения CLR для отладчика, чтобы получить):
"Вызывающий поток должен быть STA, потому что этого требуют многие компоненты пользовательского интерфейса".
Тем не менее, в моем исследовании этой проблемы я обнаружил следующее:
1) Приложения Windows Forms по умолчанию являются однопотоковыми.
2) Основная процедура генерируется автоматически для приложений Windows Forms и является скрытой.
3) Основная процедура может быть закодирована вручную, но для этого необходимо отключить Application Framework, что, на мой взгляд, весьма необходимо для приложения Windows Forms.
Итак, почему возникает это исключение, если приложение Windows Forms по умолчанию является SingleThreaded? Если нет, как я могу пометить основную процедуру как STAThread, если она скрыта? Почему я должен был включить исключения CLR, чтобы поймать это? До включения исключений CLR это не проявлялось в моем тестировании, но когда я запустил свое приложение за пределами Visual Studio, в нем кратко отображалось окно исключения при создании основной формы, но прежде чем я смог получить какие-либо подробности, оно было заменено моим заставка, тогда моя основная форма. Приложение работало нормально после этого. Однако я не могу развернуть его с сообщением об исключении, которое отображается при каждом запуске.