0

STA についての私の理解では、スレッドが STA アパートメントで実行されている場合、スレッドの安全性について心配する必要はなく、スレッドの関数への呼び出しは自動的にキューに入れられます。

私の質問は、STA でワーカー スレッドを開始し、関数を介してそのスレッドからオブジェクトを取得する場合、そのオブジェクトを使用するときにスレッド セーフについて心配する必要があるかということです。または、そのオブジェクトの関数呼び出しはスレッドセーフですか?

4

2 に答える 2

2

STA は基本的に COM と関係があり、COM オブジェクトの処理方法です。通常の .NET コードでは、自動的に物事が安全になるわけではありません。.NET コードを自動的にスレッドセーフにするものは何もありません。

単にマネージ コードを扱っていると仮定すると、アパートメントについては忘れることをお勧めします。アパートメントは、スレッド セーフなコードの記述方法 (または、コードの大部分をスレッド セーフにするどうか) に関連する可能性が低いためです。. (必須の参照: Eric Lippert の「What is this thing you call thread safe?」ブログ投稿。)

于 2011-02-25T13:26:48.297 に答える
2

スレッドを STA スレッドにしても、魔法のように安全になるわけではありません。スレッドを STA スレッドとしてマークすることは、STA スレッドで実行する必要がある COM オブジェクトをそのスレッドで実行できることを意味します。これは、COM レイヤーが呼び出しを適切にマーシャリングする方法を認識できるようにするためです。

簡単な紹介については、以下を参照してください。

http://blogs.msdn.com/b/ericlippert/archive/2003/09/18/53041.aspx

于 2011-02-25T15:25:03.850 に答える