Winforms:一个COM对象需要一个STAThread,另一个需要一个MTAThread。我该如何使用它们?

时间:2009-10-05 19:06:20

标签: c# winforms com mta apartment-state

我正在尝试使用两个COM组件构建Winforms应用程序。但是,其中一个组件仅在使用[MTAThread]时有效,而另一个仅适用于[STAThread]

推荐的解决方案是什么?

1 个答案:

答案 0 :(得分:4)

Windows窗体要求[STAThread]出现在它的主入口点上。它只适用于单线程单元状态。您可以在Windows窗体的UI线程上使用STA COM对象,没有任何问题。

这种方法的典型方法是创建自己的线程,并将Thread.ApartmentState设置为单独线程的MTA(尽管这是默认值)。从该线程中初始化并使用MTA-Threaded COM组件。

ThreadStart threadEntryPoint = ...;

var thread = new Thread(threadEntryPoint);
thread.ApartmentState = ApartmentState.MTA;  // set this before you call Start()!
thread.Start();