別のスレッドでWebbrowserコントロールを作成
各URIの各URIから新しいウェブブラウザーコントロールを作成しようとする場合、一連のURLをクリックすると、問題が発生する可能性があります。つまり、ドキュメントが完全にロードされる前にスレッドが終了するため、ドキュメントコムプレタをトリガーすることはありません。イベント。
この問題を解決するには、メッセージサイクルをポンプで汲み上げるためにSTA(単一のスレッドユニット)スレッドを作成する必要があります。これにより、WebbrowserコントロールなどのActiveXコンポーネントに適した環境が提供されます。次の例コードは、これを達成する方法を示しています:このコードでは、新しいSTAスレッドを作成し、変数Thに割り当てます。 setapartmentState()メソッドは、このスレッドがSTAスレッドになることを指定するために使用されます。その後、スレッドを起動し、BR(Webbrowser)インスタンスのNavigate()メソッドを呼び出して、必要なURLに移動します。最後に、DocumentCompletedイベント処理プログラムを登録し、Application.run()を使用してSTAスレッドのメッセージループを起動します。
ドキュメントがロードされると、browser_documentcompletedイベント処理プログラムが実行されます。ロードされたURLがターゲットURLと一致する場合、ナビゲーション情報がコンソールに印刷され、application.exitthread()を使用してスレッドを終了します。
<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>
以上がWebbrowserコントロールドキュメントの完了前にスレッド終了を防ぐ方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。