none
WebBrowser Control asynchron aufrufen RRS feed

  • Frage

  • Hallo,

    nachdem ich es den ganzen Sonntag vergeblich versucht habe und auch heute nicht weiterkomme, einen Browser asynchron anzusteuern, möchte ich euch um Unterstützung bitten.

    Ziel ist es, ein erzeugtes Html anzuzeigen und/oder es auszudrucken. Das soll mit async/await passieren, damit man den Workflow nicht zu lange unterbrechen muss. Alle Beispiele im Netz mit dem WebBrowserControl funktionieren nicht. Ich bekomme kein LoadCompleted und auch kein NavigateEventArgs ("kein Member" oder "nicht definiert").

    Das WebBrowserControl (myBrowser1) hab ich auf ein Form (FormBrowser1) in einem Projekt BrowserControl gepappt. Den Handler myBrowser1.Navigated habe ich implementiert, damit das Doc gedruckt wird, wenn es fertig geladen ist.

    Es sollte nun eine Funktion zum Anzeigen und eine andere zum Ausdrucken geben, die ich von aussen (Public) aufrufen kann. Und sie sollten asynchron laufen. Ich raufe mir die letzten Haare, es will nicht funktionieren. Kann mir jemand behilflich sein?

    Dim browser As New BrowserControl.FormBrowser1
    browser.NavigateToUrl = "file:///c:\temp\testau.html"
    browser.Show()
    
    Public Class FormBrowser1                             'in Projekt BrowserControl
        Private Sub FormBrowser1_Load(sender As Object, e As EventArgs) Handles Me.Load
            myBrowser1.Navigate(NavigateToUrl)
        End Sub
    
        Private Sub myBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles myBrowser1.DocumentCompleted
            myBrowser1.Document.Body.Style = "zoom:80%"
        End Sub
    
        Private Sub myBrowser1_Navigated(sender As Object, e As WebBrowserNavigatedEventArgs) Handles myBrowser1.Navigated
            myBrowser1.Print()
        End Sub
    
        Public Property NavigateToUrl As String
    End Class


    • Bearbeitet norbert3 Dienstag, 8. Juni 2021 06:12
    Montag, 7. Juni 2021 15:22

Antworten

  • Hallo Norbert,

    Damit Du ans DocumentCompleted-Ereignis gelangst, kommst Du nicht um eine Nachrichtenschleife in einem Nicht-Benutzeroberflächen-Thread (non-UI-Thread) herum. Sieh Dir die zwei ersten Codebeispiele im folgenden Thread an. Das zweite ist zum Ausführen bereit, wobei es von der TaskCompletionSource-Klasse Gebrauch macht. Der neue Thread muss jedenfalls vom Typ STA (single-threaded Apartment) sein und die Methode Application.Run dort aufgerufen werden.
    WebBrowser Control in a new thread

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    • Als Antwort markiert norbert3 Mittwoch, 16. Juni 2021 16:13
    Dienstag, 8. Juni 2021 08:39
    Moderator

Alle Antworten

  • Hallo Norbert,

    Damit Du ans DocumentCompleted-Ereignis gelangst, kommst Du nicht um eine Nachrichtenschleife in einem Nicht-Benutzeroberflächen-Thread (non-UI-Thread) herum. Sieh Dir die zwei ersten Codebeispiele im folgenden Thread an. Das zweite ist zum Ausführen bereit, wobei es von der TaskCompletionSource-Klasse Gebrauch macht. Der neue Thread muss jedenfalls vom Typ STA (single-threaded Apartment) sein und die Methode Application.Run dort aufgerufen werden.
    WebBrowser Control in a new thread

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    • Als Antwort markiert norbert3 Mittwoch, 16. Juni 2021 16:13
    Dienstag, 8. Juni 2021 08:39
    Moderator
  • Danke Dimitar. Das ist eine Fülle an Informationen und damit sollte ich es eigentlch hinbekommen. Leider komme ich in den nächsten Tagen nicht dazu, mich damit zu beschäftigen. Ich melde mich, wenn es einen Erfolg gibt.

    Viele Grüße Norbert

    Donnerstag, 10. Juni 2021 17:45
  • Hab mich nochmal damit beschäftigt. Ich hätte nicht gedacht, dass Async/Await so kompliziert ist. Nach ein paar Stunden habe ich aufgegeben, es zu verstehen. Mit der synchronen Ausführung kann ich nun doch ganz gut leben. Durch den Aufruf des Forms mit Show läuft der Browser eh unabhängig vom Hauptprogramm, und somit auch das Drucken. Ich muss halt kleine Brötchen backen ...

    Vielen Dank nochmal und viele Grüße

    Norbert

    Dienstag, 15. Juni 2021 13:18