2

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

推荐的解决方案是什么?

4

1 回答 1

4

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();
于 2009-10-05T19:13:01.070 回答