gpt4 book ai didi

c# - 线程状态异常

转载 作者:行者123 更新时间:2023-11-30 21:18:00 25 4
gpt4 key购买 nike

我在一个类中使用 watin,我在后台 worker 中调用那个类 Do Work 但在第一行它抛出异常

The CurrentThread needs to have it's ApartmentState set to ApartmentState.STA to be able to automate Internet Explorer.

我能做什么?

在 stackoverflow 的一个线程中有一个类似的讨论,但他的问题通过加入线程之类的东西解决了。

最佳答案

COM 作为 .NET 的鼻祖,做了一些 .NET 做不到的事情。您可以编写一个在线程中使用 List<> 的 .NET 程序,如果您没有正确锁定,它将在没有诊断的情况下惨败。然而,COM 知道 COM 组件的线程要求。如果组件说它不是线程安全的,那么你不能忽略它。这就是错误消息的意思,它只能用于“单线程单元”,STA。 STA 线程具有管道功能,可以自动将对组件的调用从工作线程编码到创建该组件的线程。与 Control.Invoke() 非常相似,但自动完成。

这严重限制了您以多线程方式使用它的选择。除了让它在 GUI 应用程序的 UI 线程上运行之外,您唯一可以做的就是创建一个 STA 线程,您可以在其中创建 IE 和 watin 实例。 This answer告诉你如何。请注意,BackgroundWorker 无法执行此操作,它的 DoWork 方法始终在 MTA 线程上运行。链接代码的关键部分是将线程切换到 STA 的 Thread.SetApartmentState 和由 Application.Run() 启动的消息循环。两者都是让这些 COM 组件正常运行所必需的。

关于c# - 线程状态异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4509577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com