重複の可能性あり:
STAとMTAについて説明していただけますか?
C#のWindowsフォームアプリケーションで、私は見たことがあります[STAThread]Program.cs の Main 関数の上。
STA スレッドと MTA スレッドをいつ使用すればよいのかを知りたいのですが。
アプリケーションにどのような影響がありますか?
ベストアンサー1
ウィンドウを作成するスレッドはいつもシングルスレッド アパートメントを作成します。STA は、スレッドセーフではない COM オブジェクトに対してスレッド保証を提供します。スレッドセーフなオブジェクトはほとんどありません。COM インフラストラクチャは、このようなオブジェクトのメソッドが常に適切なスレッドから呼び出され、必要に応じて呼び出しをマーシャリングすることを保証しています。Control.Begin/Invoke() と非常に似ていますが、コーディングなしで自動的に実行されます。
Windows の多くの機能は、この保証に依存しています。特に、クリップボード、ドラッグ アンド ドロップ、シェル ダイアログ (OpenFileDialog など) は、この保証がないと正しく動作しません。また、多くの ActiveX コントロール、WebBrowser は Winforms プロジェクトでよく使用されるコントロールです。UI スレッドを MTA スレッドにすると、デッドロックなどの障害の診断が難しくなります。または、コンポーネントの .NET ラッパーが STA で作成されたことを再確認するときに、すぐに例外が発生します。