バック グラウンド スレッドから STA COM オブジェクトを使用しています。COM オブジェクトのモードが STA であるため、STA スレッド モードの新しいスレッドから呼び出すと、COM オブジェクトのメソッドの 1 つがブロックされ、UI スレッドのようです。もブロックされます。この UI のブロックを回避できますか?
1 に答える
5
それが STA のポイントです。COM は、ワーカー スレッドから STA スレッドへの呼び出しを自動的にマーシャリングします。そのため、COM サーバー メソッドは常にスレッド セーフな方法で呼び出されます。メソッドがブロックされると、STA スレッドもブロックされます。通常は UI スレッド。
これは、スレッドでこの COM オブジェクトを使用しても、実際には何も達成されないことを意味します。本当の問題はCOMサーバーにあるという別の理由から、それはブロックされるべきではありません。これがデッドロック状態でないことを確認してください。
考えられる回避策は、別の STA スレッドに COM サーバーを作成して、少なくとも UI スレッドがブロックされないようにすることです。サンプルコードについては、この回答を確認してください。Thread.SetApartmentState 呼び出しと Application.Run 呼び出しの両方が、サーバーの快適なホームを作成するために重要です。
于 2010-12-11T15:48:56.070 に答える