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

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

推荐的解决方案是什么?

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();