我正在尝试使用两个 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();
关于c# - Winforms:一个COM对象需要一个STAThread,另一个需要一个MTAThread。我该如何使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1521816/