Frage

Meine WinForms-Anwendung verfügt über eine Registerkarte mit einer System.Windows.Forms.WebBrowser Kontrolle. Es gibt verschiedene Steuerelemente, die den Web-Browser des .Url Eigenschaft festgelegt, und wenn das Formular neu zeichnet es ruft den .Refresh(WebBrowserRefreshOption.Completely) Methode des Web-Browsers.

Es kommt jedoch vor, wird die Form neu gestrichen und der WebBrowser Inhalt ändert sich nicht. Ich breche auf der .Refresh( ) und die .Url ist die vorherige URL. Was ist los?

Nach MSDN :

Wenn Sie den Wert dieser Eigenschaft festgelegt und dann sofort wieder abrufen, abgerufen der Wert verschieden sein kann als der Wert gesetzt, wenn das WebBrowser-Steuerelement hat keine Zeit gehabt, das neue Dokument zu laden.

Nun ist nicht so besonders? Warum .Refresh( ) nicht warten, bis die Kontrolle hat „Zeit hatte, um das neue Dokument zu laden“, bevor es neu gezeichnet? Gibt es eine Möglichkeit, dies zu zwingen zu geschehen?

War es hilfreich?

Lösung

Wenn Sie etwas ganz Besonderes tun, macht es keinen Sinn machen, um die WB zu zwingen, sich selbst neu zu zeichnen. Da es seine eigene Kontrolle ist und seinen eigenen Griff hat, ist es durchaus in der Lage selbst neu zu streichen, wenn es für notwendig erachtet. Da Sie sie zwingen zu einem Zeitpunkt neu zu zeichnen, das mit seiner Readystate vollständig nicht synchron ist, ist ein „alter“ url immer zu erwarten.

Andere Tipps

Versuchen Sie einen Ereignishandler Code hinzufügen, die ausgeführt wird, wenn die „Document“ Ereignis ausgelöst wird. Dann fügen Sie Ihre Aktualisierungen in dort. Es gibt einige Beispiele von Code hier in MSDN. Wenn Sie es auf diese Weise tun verlieren Sie keine Zeit zu raten, wenn die Seite geladen ist, und die Verarbeitung fortgesetzt werden kann, sobald es fertig ist.

http://msdn.microsoft .com / en-us / library / system.windows.forms.webbrowser.documentcompleted.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top