的WinForms:一个COM对象需要一个STAThread,其他需要一个MTAThread。我该如何使用它们?

StackOverflow https://stackoverflow.com/questions/1521816

我试图建立两个COM组件WinForms应用程序。然而,该部件中的一个使用[MTAThread]并且另一个仅与[STAThread]工作时才会起作用。

将推荐的解决方案是什么?

有帮助吗?

解决方案

视窗形式的要求[STAThread]为存在于它的主入口点。它只会在单线程工作状态。您可以使用Windows窗体的UI线程上的STA COM对象,没有问题。

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

ThreadStart threadEntryPoint = ...;

var thread = new Thread(threadEntryPoint);
thread.ApartmentState = ApartmentState.MTA;  // set this before you call Start()!
thread.Start();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top