> Web瀏覽器自動化:確保在單獨的線程上完成導航 在單獨的線程中使用WebBrowser控件自動瀏覽Web瀏覽通常會通過檢測文檔負載完成提出挑戰。 事件可能不會在線程結束之前發射,以防止訪問已加載的文檔。
>解決方案:利用sta threadDocumentCompleted
解決此問題的關鍵是使用單線程公寓(STA)線程和消息循環。 STA線程為ActiveX組件(例如WebBrowser)提供了必要的環境。 這是實施此操作的方法:
這個方法創建一個sta線程。
啟動消息泵,對於WebBrowser Control的事件處理至關重要。<code class="language-csharp">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 } }</code>
終止線程,以確保清潔資源管理。 StartBrowserThread
以上是如何在單獨的線程中可靠地處理WebBrowser控制導航完成?的詳細內容。更多資訊請關注PHP中文網其他相關文章!