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