【问题标题】:How to call method of COM in parallel如何并行调用COM的方法
【发布时间】:2012-01-05 20:20:40
【问题描述】:

现在,我开发了一个使用 _ATL_MULTI_THREADED 编译的 ATL。 COM dll 在我的 C# winform 应用程序中被调用。 COM 接口如下所示:(在 c# 中)

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

在我的 C# 应用程序中: 我创建了两个名为 TA 和 TB 的线程。 在这两个线程函数体中,我并行调用了IMyInterface.RunFunction方法。

但是,IMyInterface 中的代码运行另一个线程。(不是 TA 或 TB)

如果有一些设置强制COM代码在客户端线程中运行???

【问题讨论】:

标签: multithreading com


【解决方案1】:

您的 winforms 线程是 STA,这意味着无论线程如何,对在 winform 线程中创建的 com 对象的所有调用都将使用 winform 线程。在TA或TB中创建com对象

【讨论】:

  • 我尝试将主窗体线程模式从[STAThread]修改为[MTAThread]。但是,很多代码会因为 COM 原因而崩溃。因此,只需使用 COM 的“Apartment Thread”模式即可。
  • 你不能改变winforms的线程模型。如果您希望 com 对象使用另一个线程,则必须在另一个线程中创建它。如果该线程是 MTA,那么您可以使用来自其他 MTA 线程的 com 对象,而无需线程切换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-05
  • 2011-05-13
相关资源
最近更新 更多