Webbrowserコントロールスレッドの課題へのアドレス指定
マルチスレッドアプリケーションでWebbrowserコントロールを使用するには、ページの読み込みが完了する前に早期のスレッド終了を防ぐために慎重に処理する必要があります。 この時期尚早の終了は、多くの場合、攻撃、アプリケーション機能の破壊による重要なイベントを防ぎます。
DocumentCompleted
ソリューションは、単一の読み取りアパートメント(STA)スレッドを採用することにあります。 ActiveXコンポーネントであるWebbrowserコントロールは、
STAスレッド内で実行する必要があります。 他のスレッドモデルでそれを使用しようとすると、イベントが発生しません。
以下は、Webbrowserコントロール用に特にSTAスレッドを作成および管理する方法を示す例です。
DocumentCompleted
スレッドがSTAスレッドであることを確認します。
インスタンスが作成され、<code class="language-csharp">private void runBrowserThread(Uri url) { var thread = new Thread(() => { var webBrowser = new WebBrowser(); webBrowser.DocumentCompleted += webBrowser_DocumentCompleted; webBrowser.Navigate(url); Application.Run(); // Essential for message pump in STA thread }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); } void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { var webBrowser = (WebBrowser)sender; if (webBrowser.Url == e.Url) { Console.WriteLine($"Navigation complete to: {e.Url}"); Application.ExitThread(); // Safely terminates the STA thread } }</code>イベントハンドラーが添付され、ナビゲーションが開始されます。
は不可欠です。 STAスレッドがイベントを正しく処理するために必要なメッセージポンプを提供します。
ナビゲーションが完了すると、runBrowserThread
が呼び出されます。 ナビゲーションがターゲットURLに正常に到達したかどうかをチェックし、SetApartmentState(ApartmentState.STA)
を呼び出してスレッドをきれいに停止します。
WebBrowser
このアプローチは、ウェブブラウザー制御に安定した信頼性の高い環境を提供し、DocumentCompleted
イベントの火災を保証し、マルチスレッドアプリケーション内でのスムーズな動作を可能にします。
以上がマルチスレッドアプリケーションでWebbrowserコントロールを使用する場合、早期のスレッド終了を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。