我正在尝试使用两个COM组件构建Winforms应用程序。但是,其中一个组件仅在使用[MTAThread]
时有效,而另一个仅适用于[STAThread]
。
推荐的解决方案是什么?
答案 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();