首頁 > 後端開發 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板