質問: .NETでForms/WPFを使う場合にお約束のように付けられている `STAThreadAttribute` ですが、クリップボードを扱う場合などはコンソールアプリでも付ける必要があります。 では逆に、`STAThreadAttribute` を付けない方がいい場合はあるのでしょうか。 COMサーバを作る場合であれば、MTAの方が複数スレッドから呼び出せることでパフォーマンス向上が狙えるかと思いますが、そうでないアプリケーションでMTAにする理由はあまりないように思えます。.NET内部でCOMサーバーになっているケースもあるとは思いますが、それが前述の `STAThreadAttribute` が必要な場面だとすると、結局STAにせざるを得ません。 だとするとコンソールアプリケーションやサーバー等を作る場合でも、とりあえず `STAThreadAttribute` を付けておけばいいのでは?と思ったのですがどうでしょうか。 参考サイト * STAとMTA - EthernalWindows * アパートメントモデルと、.NETのSTAThreadAttribute - Bug Catharsis * STAThreadの意味は?: .NET Tips: C#, VB.NET
回答: STA; Single-Threaded Apartments.aspx)はあまり知られてはいませんが > > Each single-threaded apartment **must have a message loop** to handle calls from other processes and apartments within the same process. Single-threaded apartments without objects (client only) also **need a message loop** to dispatch the broadcast messages that some applications use. > > > とあり、単にスレッドをSTAで初期化すればいいというわけではなく状況によってはメッセージループを回す必要があります。 ですので、.NET Frameworkとしても確実にメッセージループを回すWinFormsやWPFのようなプロジェクトでなければ、`[STAThread]`が付与されずMTAで初期化するようにしているのだと思います。