Heim >Backend-Entwicklung >C++ >Wie verhindern Sie die Beendigung der Thread vor dem Abschluss des Webbrowser -Steuerungsdokuments?

Wie verhindern Sie die Beendigung der Thread vor dem Abschluss des Webbrowser -Steuerungsdokuments?

Barbara Streisand
Barbara StreisandOriginal
2025-02-01 21:13:18252Durchsuche

How to Prevent Thread Termination Before WebBrowser Control Document Completion?

Erstellen Sie das Webbrowser -Steuerelement in einem separaten Thread

Wenn Sie versuchen, in jedem URI eine neue Webbrowser -Steuerung von jedem URI zu erstellen, klicken Sie auf eine Reihe von URLs, und können Sie auf ein Problem stoßen, dh der Thread endet, bevor das Dokument vollständig geladen ist, sodass es niemals Trigger -Dokumentcomplete auslösen wird Ereignis.

Um dieses Problem zu lösen, muss ein STA -Thread (Single -Thread -Einheit) erstellt werden, um den Nachrichtenzyklus zu pumpen. Dies bietet eine geeignete Umgebung für ActiveX -Komponenten wie Webbrowser -Steuerung. Der folgende Beispielcode zeigt, wie dies erreicht werden kann:

Erstellen Sie in diesem Code einen neuen STA -Thread und weisen Sie ihn der Variablen -tH zu. SetArtmentState () -Methode wird verwendet, um anzugeben, dass dieser Thread STA -Thread ist. Starten Sie anschließend den Thread und rufen Sie die Navigate () -Methode auf der BR (WebBrowser) -Instanz auf, um zur erforderlichen URL zu navigieren. Registrieren Sie schließlich das Dokument -Completed -Ereignisverarbeitungsprogramm und verwenden Sie Anwendung.Run (), um die Nachrichtenschleife des STA -Threads zu starten.
<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>

Wenn das Dokument geladen wird, wird das Programm "Browser_Document Completed Event Processing" durchgeführt. Es prüft, ob die geladene URL mit der Ziel -URL übereinstimmt.

Das obige ist der detaillierte Inhalt vonWie verhindern Sie die Beendigung der Thread vor dem Abschluss des Webbrowser -Steuerungsdokuments?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn