gpt4 book ai didi

c# - BackgroundWorker 和 WebBrowser 控件

转载 作者:太空狗 更新时间:2023-10-29 20:53:39 26 4
gpt4 key购买 nike

是否可以/建议将后台工作线程与 Web 浏览器控件一起使用?

我正在创建一个在 google 中搜索关键字的机器人,然后检查前 10 页中的网站以查看网站是否排名。

用户最多可以提供 20 个站点进行检查,并且可以使用代理。所以理想情况下,我希望有 5 个线程同时工作。

这可能吗?我可能在某处听说 WebBrowser 控件和线程存在问题。

最佳答案

事实并非如此。 WebBrowser 使用 Internet Explorer,这是一个 COM 组件。 COM组件有一个线程模型,IE使用“Apartment”。这是一个昂贵的词,意味着它不是线程安全的。您可以在 BGW 中调用它的方法,但 COM 会自动将调用编码到 UI 线程。由于所有方法调用和属性访问实际上都发生在 UI 线程上,因此您可以通过使用 BGW 使其变慢

您实际上可以在另一个线程上运行 WebBrowser,您必须在该线程上创建它的一个实例。并且您将必须创建一个线程,即所谓的单线程单元。 STA,您可能会从 Winforms 或 WPF 应用程序的 Main() 方法的 [STAThread] 属性中认出一个首字母缩写词。将工作线程更改为 STA 需要在启动之前调用 Thread.SetApartmentState()。您不能为 BGW 执行此操作。并且线程必须泵出一个消息循环来实现 STA 契约,它必须调用 Application.Run()。一方面,需要让 WebBrowser 引发其事件。 This answer展示了方法。

考虑使用 WebRequest 类。

关于c# - BackgroundWorker 和 WebBrowser 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2491236/

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