1. ホーム
  2. c#

[解決済み] STAThread]は何をしているのですか?

2022-01-31 04:37:52

質問

C#3.5を学習しているのですが、以下のことを知りたいのです。 [STAThread] は、プログラムの中でどのような役割を担っているのでしょうか?

どのように解決するのですか?

その STAThreadAttribute は、基本的に Windows メッセージポンプが COM コンポーネントと通信するために必要なものです。コア Windows Forms は COM を使いませんが、システムダイアログのような OS の多くのコンポーネントはこの技術を使っています。

MSDN は、その理由をもう少し詳しく説明しています。

<ブロッククオート

STAThreadAttributeは、以下のことを示します。 のCOMスレッドモデル アプリケーションはシングルスレッド のアパートで使用することができます。この属性は のエントリポイントに存在します。 Windows Forms を使用するアプリケーションに適用されます。 省略した場合、Windows コンポーネントが正しく動作しない可能性があります。 この属性がない場合 アプリケーションはマルチスレッドの アパートメントモデルではありません。 は Windows Forms に対応しています。

このブログの記事 ( なぜSTAThreadが必要なのですか? ) でも、この要件についてよく説明されています。もし、スレッドモデルがCLRレベルでどのように機能するかについて、より深く知りたいのであれば、以下を参照してください。 2004年6月のMSDNマガジンの記事 (Archived, Apr. 2009).