2012年10月31日水曜日

STAThread属性って何?

前々から気になっていた「STAThread属性」。
これって、いったい何なのか?

気になってしょうがないので少し調べてみました。

STAThreadAttribute クラス(MSDN)には、次のように書いてあります。

アプリケーションの COM スレッド モデルがシングルスレッド アパートメント (STA: Single-Threaded Apartment) であることを示します。
はい、言っている意味がまったく分かりません。


そんでもって、Windows フォームのエントリ ポイントを STAThread でマークします(MSDN)には、次のように書いてあります。

STAThreadAttribute は、アプリケーションの COM スレッド処理モデルがシングルスレッド アパートメントであることを示します。この属性は、Windows フォームを使用するすべてのアプリケーションのエントリ ポイントに指定する必要があります。省略すると、Windows コンポーネントが正常に機能しないことがあります。属性がない場合、アプリケーションではマルチスレッドのアパートメント モデルを使用します。このモデルは、Windows フォームでサポートされていません。
ほう、Windows フォームを使用するすべてのアプリケーションのエントリ ポイントには「STAThread属性」を必ず指定する必要があるんですね。

「STAThread属性」を指定しないと、Windows フォームではサポートされていない「マルチスレッドのアパートメント モデル」を使用することになり、正常に機能しなくなると。

なるほど!!
「シングルスレッド アパートメント」や「マルチスレッド アパートメント」に関しては、まったく分かりませんが、今のところは、Windows フォームで作るアプリケーションには「STAThread属性」を必ず指定する必要がある。ということが分かれば十分です。