Webブラウザの自動化:別のスレッドでのナビゲーションの完了を確保
別のスレッドでのWebブラウザーコントロールでWebブラウジングを自動化することは、ドキュメントの負荷完了を検出する際に課題を提示することがよくあります。 スレッドが終了する前に発生しない可能性があり、ロードされたドキュメントへのアクセスを防ぎます。DocumentCompleted
ソリューション:STAスレッドを利用
これを解決するための鍵は、シングルスレッドアパートメント(STA)スレッドとメッセージループを使用することです。 STAスレッドは、WebbrowserなどのActiveXコンポーネントに必要な環境を提供します。 これを実装する方法は次のとおりです この
メソッドは、STAスレッドを作成します。Webbrowserコントロールのイベント処理には重要なメッセージポンプを開始します。
イベントハンドラーは、ナビゲーションの完了を確認し、URLをログにしてから、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 } }
以上がWebbrowserコントロールナビゲーションの完了を別のスレッドで確実に処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。