首页 > 后端开发 > C++ > 如何在单独的线程中可靠地处理WebBrowser控制导航完成?

如何在单独的线程中可靠地处理WebBrowser控制导航完成?

Linda Hamilton
发布: 2025-02-01 21:16:11
原创
328 人浏览过

How to Reliably Handle WebBrowser Control Navigation Completion in a Separate Thread?

> Web浏览器自动化:确保在单独的线程上完成导航 在单独的线程中使用WebBrowser控件自动浏览Web浏览通常会通过检测文档负载完成提出挑战。 事件可能不会在线程结束之前发射,以防止访问已加载的文档。

>

解决方案:利用sta threadDocumentCompleted

>

解决此问题的关键是使用单线程公寓(STA)线程和消息循环。 STA线程为ActiveX组件(例如WebBrowser)提供了必要的环境。 这是实施此操作的方法:

这个

方法创建一个sta线程。

启动消息泵,对于WebBrowser Control的事件处理至关重要。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

private void StartBrowserThread(Uri url) {

    var thread = new Thread(() => {

        var webBrowser = new WebBrowser();

        webBrowser.DocumentCompleted += WebBrowser_DocumentCompleted;

        webBrowser.Navigate(url);

        Application.Run(); // Essential for the message loop

    });

    thread.SetApartmentState(ApartmentState.STA);

    thread.Start();

}

 

private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {

    var webBrowser = (WebBrowser)sender;

    if (webBrowser.Url == e.Url) {

        Console.WriteLine($"Navigated to: {e.Url}");

        Application.ExitThread(); // Safely stops the thread

    }

}

登录后复制
事件处理程序确认导航完成,记录URL,然后使用

终止线程,以确保清洁资源管理。StartBrowserThread

以上是如何在单独的线程中可靠地处理WebBrowser控制导航完成?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板