質問

私はC#3.5を学んでいると私は、我々のプログラムで何[STAThread]知りたいですか?

役に立ちましたか?

解決

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

MSDN にわずかに理由を説明詳細ます:

  

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

このブログの記事に(のなぜ必要?のSTAThread)も非常によく要件を説明しています。あなたがスレッドモデルは、CLRレベルでどのように機能するかについてのより詳細なビューをしたい場合は、<のhref = "https://web.archive.org/web/20090417041403/http://msdn.microsoft.comを参照してください2004年6月のから/en-us/magazine/cc188722.aspx」のrel = "noreferrer">このMSDNマガジンの記事(2009年4月のアーカイブ)。

他のヒント

それはあなたがシングルスレッドアパートメントモデルにしているコンパイラに指示します。これは、邪悪なCOMのものであることがSTAとして実装され、その描画のためのWin32を使用して、通常は(GUIの)Windowsフォームのために使われています。あなたが複数のスレッドからSTAモデル何かを使用している場合は、破損したオブジェクトを取得します。

あなたは(あなたがコーディングの任意のフォームをやった場合は)別のスレッドからグイ上に呼び出す必要があり理由です。

基本的にはちょうどSTAそうでない奇妙なものが起こるようにWindowsのGUIスレッドがマークされなければならないことを受け入れて、それについて心配しないでください。

  

STAThreadAttributeスレッドをマーク   シングルスレッドCOMを使用するには   COMが必要な場合は、アパート。沿って   デフォルトでは、.NETはでCOMを初期化しません。   すべて。これは、COMが必要とされている場合のみですが、   以下のようなとき、COMオブジェクトまたはCOMコントロール   作成またはドラッグ「n」の低下があるさ   必要に応じて、そのCOMが初期化されます。いつ   それが起こる、.NETコール   CoInitializeEx機能の基礎となります、   かどうかを示すフラグをとります   マルチスレッドにスレッドに参加します   またはシングルスレッドアパートメントます。

詳細はを読みますここの(アーカイブされた、2009年6月)

はなぜSTAThreadが必要ですか

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top