2012-01-05 8 views
1

今、私は_ATL_MULTI_THREADEDでコンパイルされたATLを開発しました。 COM dllは私のC#winform appliactionで呼び出されました。 COMインターフェイスは、次のようになります。(C#の場合)COMのメソッドを並行して呼び出す方法

public interface IMyInterface 
{ 
    [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), 
    void RunFunction(); 
} 

を私のC#アプリケーションで: は私がTA、およびTBという名前の2つのスレッドを作成しました。 両方のスレッド関数本体で、私はIMyInterface.RunFunctionメソッドを並列に呼び出します。

しかし、IMyInterface実行別のスレッドでのコード。(ないTAまたはTB)

COMコードを強制的にいくつかの設定がある場合は、クライアントのスレッドで実行されます?

+0

[COMスレッドモデルの理解と使用](http://msdn.microsoft.com/en-us/library/ms809971.aspx) – lsalamon

答えて

1

winformsスレッドはSTAです。これは、スレッドに関係なく、winformスレッドで作成されたCOMオブジェクトへのすべての呼び出しがwinformスレッドを使用することを意味します。 TAまたはTBでCOMオブジェクトを作成する

+0

したがって、無効にする方法STA。 –

+0

メインフォームのスレッドモードを[STAThread]から[MTAThread]に変更しようとしています。しかし、COMの理由で多くのコードがクラッシュします。そのため、COMの「アパートメントスレッド」モードを使用してください。 –

+0

winformsのスレッドモデルを変更することはできません。 comオブジェクトで別のスレッドを使用する場合は、別のスレッドで作成する必要があります。そのスレッドがMTAの場合、スレッドスイッチなしで他のMTAスレッドのcomオブジェクトを使用できます。 – adrianm

関連する問題