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

发布于 2024-08-07 05:29:42 字数 142 浏览 8 评论 0原文

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

推荐的解决方案是什么?

I'm trying to build a Winforms application with two COM components. However, one of the components only works when using [MTAThread] and the other only works with [STAThread].

What would the recommended solution be?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

£冰雨忧蓝° 2024-08-14 05:29:42

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();

Windows forms requires [STAThread] to be present on it's main entry point. It will only work in Single threaded apartment state. You can use your STA COM object on the UI thread in Windows Forms, with no issues.

The typical approach for this is to create your own thread, and set the Thread.ApartmentState to MTA (although this is the default) for the separate thread. Initialize and use your MTA-Threaded COM components from within this thread.

ThreadStart threadEntryPoint = ...;

var thread = new Thread(threadEntryPoint);
thread.ApartmentState = ApartmentState.MTA;  // set this before you call Start()!
thread.Start();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文