首页 > 后端开发 > C++ > 如何在WebBrowser控制文档完成之前防止线程终止?

如何在WebBrowser控制文档完成之前防止线程终止?

Barbara Streisand
发布: 2025-02-01 21:13:18
原创
250 人浏览过

How to Prevent Thread Termination Before WebBrowser Control Document Completion?

在单独线程中创建 WebBrowser 控件

在尝试通过为每个 URI 在单独线程中创建一个新的 WebBrowser 控件来自动点击一系列 URL 时,您可能会遇到一个问题,即线程在文档完全加载之前结束,因此永远不会触发 DocumentComplete 事件。

为了解决这个问题,需要创建一个 STA(单线程单元)线程来泵送消息循环。这为 WebBrowser 控件等 ActiveX 组件提供了合适的环境。以下示例代码演示了如何实现这一点:

<code class="language-csharp">private void runBrowserThread(Uri url) {
    var th = new Thread(() => {
        var br = new WebBrowser();
        br.DocumentCompleted += browser_DocumentCompleted;
        br.Navigate(url);
        Application.Run();
    });
    th.SetApartmentState(ApartmentState.STA);
    th.Start();
}

void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
    var br = sender as WebBrowser;
    if (br.Url == e.Url) {
        Console.WriteLine("已导航到 {0}", e.Url);
        Application.ExitThread();   // 停止线程
    }
}</code>
登录后复制

在此代码中,创建一个新的 STA 线程并将其分配给变量 th。SetApartmentState() 方法用于指定此线程将是 STA 线程。随后,启动线程,并在 br (WebBrowser) 实例上调用 Navigate() 方法以导航到所需的 URL。最后,注册 DocumentCompleted 事件处理程序,并使用 Application.Run() 启动 STA 线程的消息循环。

当文档加载过程完成后,将执行 browser_DocumentCompleted 事件处理程序。它检查加载的 URL 是否与目标 URL 匹配,如果匹配,则将导航信息打印到控制台,并使用 Application.ExitThread() 终止线程。

以上是如何在WebBrowser控制文档完成之前防止线程终止?的详细内容。更多信息请关注PHP中文网其他相关文章!

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