Multithreading 如何并行调用COM的方法
现在,我开发了一个ATL,它使用多线程进行编译。 COM dll是在我的C#winform应用程序中调用的。 COM接口如下所示:(在c#中) 在我的C#应用程序中: 我创建了两个名为TA和TB的线程。 在两个线程函数体中,我并行调用Multithreading 如何并行调用COM的方法,multithreading,com,Multithreading,Com,现在,我开发了一个ATL,它使用多线程进行编译。 COM dll是在我的C#winform应用程序中调用的。 COM接口如下所示:(在c#中) 在我的C#应用程序中: 我创建了两个名为TA和TB的线程。 在两个线程函数体中,我并行调用IMyInterface.RunFunction方法 但是,IMyInterface中的代码运行另一个线程。(不是TA或TB) 如果有一些设置强制COM代码在客户端线程中运行???您的winforms线程是STA,这意味着对winform线程中创建的COM对象的所有
IMyInterface.RunFunction
方法
但是,IMyInterface
中的代码运行另一个线程。(不是TA或TB)
如果有一些设置强制COM代码在客户端线程中运行???您的winforms线程是STA,这意味着对winform线程中创建的COM对象的所有调用(无论线程如何)都将使用winform线程。在TA或TB中创建com对象您的winforms线程是STA,这意味着对在winform线程中创建的com对象的所有调用(无论线程如何)都将使用winform线程。在TA或TB中创建com对象了解热it工作了解热it工作我尝试将主窗体线程模式从[StatThread]修改为[MTAThread]。但是,由于COM的原因,很多代码都会崩溃。因此,只需使用COM的“单元线程”模式。您不能更改winforms的线程模型。如果希望com对象使用另一个线程,则必须在另一个线程中创建它。如果该线程是MTA,则可以使用其他MTA线程中的com对象,而无需使用线程开关。我尝试将主窗体线程模式从[StatThread]修改为[MTAThread]。但是,由于COM的原因,很多代码都会崩溃。因此,只需使用COM的“单元线程”模式。您不能更改winforms的线程模型。如果希望com对象使用另一个线程,则必须在另一个线程中创建它。如果该线程是MTA,则可以使用其他MTA线程中的com对象,而无需使用线程开关。
public interface IMyInterface
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime),
void RunFunction();
}