2012-01-05 36 views
1

現在,我開發了一個用_ATL_MULTI_THREADED編譯的ATL。 COM DLL在我的C#winform應用程序中被調用。 COM接口是這樣的:(在C#)如何並行調用COM的方法

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

在我的C#應用​​程序: 我創建了兩個線程名爲TA和TB。 在這兩個線程函數體中,我並行地調用了IMyInterface.RunFunction方法。

但是,IMyInterface運行代碼另一個線程。(不TA或TB)

如果有一些設置以強制COM代碼運行在客戶端的線程???

+0

理解它的工作原理[瞭解和使用COM線程模型](http://msdn.microsoft.com/en-us/library/ms809971.aspx) – lsalamon 2012-01-05 12:42:29

回答

1

您的winforms線程是STA,這意味着所有調用,無論線程,在com中創建的winform線程對象都將使用winform線程。在TA或TB中創建com對象

+0

因此,如何禁用STA。 – 2012-01-06 00:49:48

+0

我嘗試將主窗體線程模式從[STAThread]修改爲[MTAThread]。但是,很多代碼會因爲COM原因而崩潰。因此,只需使用COM的「公寓線程」模式即可。 – 2012-01-06 03:51:41

+0

您無法更改winforms的線程模型。如果你想com對象使用另一個線程,你必須在另一個線程中創建它。如果該線程是MTA,則可以在沒有線程切換的情況下使用來自其他MTA線程的com對象。 – adrianm 2012-01-07 13:28:25

相關問題