41

重複の可能性:
STA と MTA について説明していただけますか?

すべての ThreadPool スレッドはマルチスレッド アパートメントにあります。

--MSDNによると

どういう意味ですか?マルチ スレッド アパートメント モデルとシングル スレッド アパートメント モデルの違いに本当に関心があります。または、アパートのモデルはどういう意味ですか?MSDN を読みましたが、意味がわかりません。アイデアはあると思いますが、ここにいる誰かが簡単な英語で説明できると思っていました.

ありがとう、アンソニー・D

更新 1

これを見つけました STA と MTA について説明していただけますか?

誰でももっと説明できますか?

更新 2

また、これがスレッドプールにどのように適用されるか、およびこのために何に注意する必要があるかについての回答も探しています。

4

5 に答える 5

56

STA (シングルスレッド アパートメント) と MTA (マルチスレッド アパートメント) はCOMと関係があります。COM コンポーネントは、シングル スレッドでアクセスできるように設計できます。その場合、COM コンポーネントはSTAでホストされるか、内部的にスレッド セーフにしてMTAでホストできます。プロセスは、MTA を 1 つだけ持つことができますが、STA は多数持つことができます。COM コンポーネントのみを使用する場合、本当に知っておく必要があるのは、アパートメントをコンポーネントに一致させる必要があることです。そうしないと、厄介なことが起こります。

于 2009-01-27T20:35:57.660 に答える
12

実際には、STA と MTA は .NET コードに影響を与えます。おそらく必要になるよりも詳細な方法については、Chris Brumme のブログ エントリを参照してください。

https://devblogs.microsoft.com/cbrumme/apartments-and-pumping-in-the-clr/

STA が .NET でメッセージをポンプする方法を理解することは非常に重要です。それには結果があります。

于 2009-01-28T18:26:02.087 に答える
9

COM オブジェクトがシングル スレッド環境にあると認識する必要がある場合は、STA を使用します。作成とすべての呼び出しが同じスレッドによって行われることが保証されます。スレッド ローカル ストレージを安全に使用でき、クリティカル セクションを使用する必要はありません。

COM オブジェクトに多数のスレッドが同時にアクセスできる場合は、MTA を使用してください。ガードは配置されません。

于 2009-01-27T20:33:03.407 に答える
5

他の人が指摘しているように、一般的に .NET アプリケーションへの影響はほとんどありません。

ただし、単体テストに使用される Microsoft テスト ホストは、実際には STA に実装されていることに注意してください。つまり、単体テストで実行できることには制限があります。たとえば、Microsoft のテスト ホストを使用している場合、ユニット テストでWaitAllon aを実行することはできません。WaitHandle

于 2009-01-27T20:45:42.290 に答える
2

COM 相互運用を行っていない限り、これについて心配する必要はありません。その場合、マーシャリングの問題があります。.net 自体への影響はありません。

于 2009-01-27T20:32:16.187 に答える