アパートの続き

同時に同じアパートで実行されるスレッドは1つだけである。

素直に考えればこの説明はSTAだけのことを言っているんだろうなぁ。でないと、MTAの時にロックが云々という話にならないだろうし。ところで、WinFormsなアプリ書くときに、Mainに

[STAThread]
static void Main() 

と、STAThread属性を付けてSTAアパートにしますが、最初、これがよく分からなかったです。(というか今も分かってないけど)。「WinFormsはSTAじゃないと動かないので云々」という説明は見かけるのですが、別に付けなくても動くし・・・(.NET1.0ではバグの所為で一部問題があったようですが)。COMのアパートの考えが有効でしたら、異なるThreadingモデル(デフォルトはMTA)の場合、アパートを越えたアクセスにはプロキシが必要でかつ、スレッドの切り替えはコストが掛かるので、STAThread属性を付けないとパフォーマンス的に無駄って結論になりますが、これであっているのでしょうか?(^^;

んー、WinForms用にSTAが作られる(ホント?)のだから、MainからApplication.RunするだけのMTAが無駄というのもあるか。何かこんがらがってきた。(^^;

(追記)
なんか最初から間違っていた気が。もし、WinFormsがアパートに影響されるのなら、(STAにしておけば)別スレッドからコントロールのメソッド呼ぶのにわざわざInvokeなんか使う必要ないだろう。多分、WinForms関連のクラスでCOM呼んでいるヤツがいて、もし、それを使うならSTAにしておいた方が都合がよい、って程度じゃないかな。