c# - Winforms:一个COM对象需要一个STAThread,另一个需要一个MTAThread。我该如何使用它们?

标签 c# winforms com mta apartment-state

我正在尝试使用两个 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/

相关文章:

c# - 如何确定数组中的哪个字符串与给定字符串最相似?

winforms - 如何在Visual Studio中创建像解决方案资源管理器这样的控件?

c#.net COM dll 中断了对 vb6 应用程序的引用

c# - 处理包装 IDispatch COM 接口(interface)的 c# 接口(interface)

c++ - 如何在 Borland C++ 中调用返回字符串数组的方法?

c# - 将文件夹中包含的所有图像上传到数据库 ASP MVC 4 Razor

c# - 重构ViewModels

c# - 每个枚举数组都实现了 IEnumerable<EveryOtherEnum>。我该如何解决这个问题?

c# - 如何在 Windows 7 上删除 Java 程序的标题栏和任务栏图标?

c# - C# 中的用户控件与自定义控件