Visual Studio 2010 を使用して WinForms VB アプリを使用しています。WPF DocumentViewer を使用しているため、ElementHost コントロールによってホストされています。私の AppMain_Form.Designer.vb では、次の (生成された) ステートメントが実行されると:
Me.rv_doc_vwr_host = New System.Windows.Forms.Integration.ElementHost()
例外が発生します (デバッガーが取得できるように CLR 例外を有効にする必要がありました)。
「多くの UI コンポーネントがこれを必要とするため、呼び出しスレッドは STA でなければなりません。」
ただし、この問題の調査では、次のことがわかりました。
1) Windows フォーム アプリケーションは、デフォルトでシングルスレッドです。
2) Main プロシージャは、Windows フォーム アプリケーション用に自動的に生成され、非表示になります。
3) メイン プロシージャは手動でコーディングできますが、これにはアプリケーション フレームワークを無効にする必要があります。これは、Windows フォーム アプリケーションにはむしろ必要だと思います。
では、Windows フォーム アプリケーションが既定でシングルスレッド化されている場合、この例外が発生するのはなぜでしょうか? そうでない場合、Main プロシージャが非表示の場合、STAThread としてマークするにはどうすればよいですか? これをキャッチするために CLR 例外を有効にする必要があったのはなぜですか? CLR 例外を有効にする前は、これは私のテストでは表示されませんでしたが、Visual Studio の外部でアプリを実行すると、メイン フォームの作成に関する例外ボックスが簡単に表示されましたが、詳細を取得する前に、例外ボックスに置き換えられました。スプラッシュ スクリーン、次にメイン フォームです。その後、アプリは正常に動作しました。しかし、起動するたびに例外メッセージが表示されてデプロイできません。