Webbrowserproblem-> readystate <> complete

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Webbrowserproblem-> readystate <> complete

    Hallo vb-p,

    habe versucht eine passende überschrift zu finden aber irgendwie weiss ich nicht ob das passt ^^

    So ich habe eine Funktion die bisher eigentlich immer funktioniert hat.
    Auf einmal Meckert er rum und ich weiss nicht warum.

    Ich benutze

    VB.NET-Quellcode

    1. While WebBrowser_message.ReadyState <> WebBrowserReadyState.Complete
    2. Application.DoEvents()
    3. End While


    um einen Buttonklick kurz zu unterbrechen.

    Beim ausführen bekommei ich aber bei

    VB.NET-Quellcode

    1. While WebBrowser_message.ReadyState <> WebBrowserReadyState.Complete


    folgenden Fehler:

    InvalidCastException wurde nicht vom Benutzercode behandelt.
    Die angegebene Umwandlung ist ungültig.


    Ich weiss nicht was ich falsch mache denn es hat ja auch immer so funktioniert.
    Warum kann einfach kein ausdruckstarker Error angezeigt werden ?!

    mfg TBS
    Ich hab heute meiner Katze beim spielen
    zugesehen, sie ist die ganze Zeit einem Ball nachgejagt und ich hab mir
    überlegt, das Tier ist echt mit sehr einfachen Dingen zu begeistern...
    Dann ist mir aufgefallen, dass ich 10 Minuten nur meine Katze
    angestarrt habe.
    Das Webbrowser-Control hat doch ein Event, dass gefeuert wird, wenn die Seite geladen ist.

    EDIT: Nutzt Du das Webbrowser-Control von einem anderen Thread aus?
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SpaceyX“ ()

    Ich weiss nich was du mit dem ersten Satz meinst.

    Zu dem Edit: Nein, ich benutze keinen anderen Thread.

    Da niemand eine Antwort hat:

    Ich hatte schon länger die Vermutung dass es an der aktuellen Situation liegt:
    Windows 7 spinnt im allgemeinen bei mir. Da dachte ich es hat villeicht auch meine IDE involviert.
    Ich werde es -sobald ich die Windows 7 DVD gefunden- erneut installieren. Mal schauen ob es
    dann wieder funktioniert.

    mfg TBS
    Ich hab heute meiner Katze beim spielen
    zugesehen, sie ist die ganze Zeit einem Ball nachgejagt und ich hab mir
    überlegt, das Tier ist echt mit sehr einfachen Dingen zu begeistern...
    Dann ist mir aufgefallen, dass ich 10 Minuten nur meine Katze
    angestarrt habe.
    Wie, Du kennst keine Events?

    VB.NET-Quellcode

    1. Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    2. End Sub
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    TheBlackSnitter schrieb:


    Windows 7 spinnt im allgemeinen bei mir. Da dachte ich es hat villeicht auch meine IDE involviert.
    Ich werde es -sobald ich die Windows 7 DVD gefunden- erneut installieren. Mal schauen ob es
    dann wieder funktioniert.


    Spar dir den Blödsinn. Windows neuinstallieren sollte man öfter mal machen, aber dein Problem "InvalidCastException wurde nicht vom Benutzercode behandelt."t hat zu 99,99999999% nix mit deinem spinnenden windows zu tun.
    Wenn dein Programm im Debug Modus eine InvalidCastException wirft kannst du doch nachschauen in welcher Zeile er abgestürzt ist.

    Hast du eigentlich "Option Strict On"?
    Wie fütterst Du denn Deinen WebBrowser, damit er das tut, was er tun soll?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Marcus.obi
    Option Strikt ist an.

    @Rod
    WebBrowser_message.Navigate("www.google.de")

    While WebBrowser_message.ReadyState <> WebBrowserReadyState.Complete
    Application.DoEvents()
    End While
    @All

    Das hat zu 99,98% etwas mit meinem Windows zu tun, denn heute hab ich es wieder versucht und der Teil funktioniert jetzt >-< Werde es mal neu installieren.
    Ich hab heute meiner Katze beim spielen
    zugesehen, sie ist die ganze Zeit einem Ball nachgejagt und ich hab mir
    überlegt, das Tier ist echt mit sehr einfachen Dingen zu begeistern...
    Dann ist mir aufgefallen, dass ich 10 Minuten nur meine Katze
    angestarrt habe.
    Für solche Fälle bietet sich immer eine VM an, um auf verschiedenen Systemen testen zu können. Vielleicht installierst Du Dir gleich eine mit, wenn Du Dein System neu aufsetzt. Nochmal zu Deinem Problem. Ich will Dich ja nicht nerven, aber schreib Deinen Code, der nach Deinem Gemurkse da ausgeführt wird

    VB.NET-Quellcode

    1. WebBrowser_message.Navigate("www.google.de")
    2. While WebBrowser_message.ReadyState <> WebBrowserReadyState.Complete
    3. Application.DoEvents()
    4. End While


    (Wenn schon, dann leg den Thread mit Thread.Sleep(50) oder nem anderen Wert, schlafen. )

    in den Eventhandler des Webbrowser-Controls

    VB.NET-Quellcode

    1. Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    2. End Sub


    Das wird nämlich genau dann ausgeführt, wenn der Browser nichts mehr zu laden hat. Und Du bist Dein Problem zu 99,98% los.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Gute Idee mit der VM-Ware, werde ich machen!
    Ja das weiss ich, nur soll das eben nicht immer passieren wenn ich ein Dokument geladen habe. Warum ist das denn
    ein Gemurkse? Bis jetzt war ich immer sehr zufrieden. ^^
    Wenn ich ihn einfrier dann friert auch leider meine GUI ein, deswegen das mit der Application.DoEvents

    mfg TBS :]
    Ich hab heute meiner Katze beim spielen
    zugesehen, sie ist die ganze Zeit einem Ball nachgejagt und ich hab mir
    überlegt, das Tier ist echt mit sehr einfachen Dingen zu begeistern...
    Dann ist mir aufgefallen, dass ich 10 Minuten nur meine Katze
    angestarrt habe.
    Deine while Schleife ist unberechenbar:

    VB.NET-Quellcode

    1. While WebBrowser_message.ReadyState <> WebBrowserReadyState.Complete
    2. Application.DoEvents()
    3. End While
    Der Readystate des Webbrowsers wird (abhängig von der zu ladenden Webseite) mehrmals während eines einzigen Ladevorgangs geändert. Beim Laden einer Webseite kann das in mehreren Teilen geschehen. Dann wird immer kurzzeitig der ReadyState auf complete gesetzt. Ebenso wird das DocumentCompleted Event mehrmals gefeuert.

    Die einzig saubere Lösung ist, den Code von SpaceyX zu benutzen und dann die WebBrowserDocumentCompletedEventArgs auszuwerten um das richtige (am besten das letzte) DocumentCompleted Event zu erwischen.

    VB.NET-Quellcode

    1. If e.Url.ToString = "www.abc.de" Then
    2. Machwas()
    3. End If
    Ist es sinnvoll, den WebBrowser in einen BGW oder einen externen Thread zu packen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!