2016-06-27 4 views
0

Bitte beachten Sie den Code unten:WebBrowser-Steuerelement nicht die Homepage zu starten

Imports System.Windows.Forms 
Imports System.Threading 

Public Class clsLoadWebpageBehindScenes 
    Private boolDocumentCompleted As Boolean 
    ' Private intTest As Integer 

    Private Sub WebBrowser_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) 
     Try 
      Dim BrowsePage As WebBrowser = DirectCast(sender, WebBrowser) 
      'BrowsePage.ClientSize = New Size(BrowsePage.Document.Body.ScrollRectangle.Width, BrowsePage.Document.Body.ScrollRectangle.Height) 
      BrowsePage.ScriptErrorsSuppressed = True 
      BrowsePage.ScrollBarsEnabled = True 
      BrowsePage.BringToFront() 
      'compressImage(ConvertedImage) 
      'MsgBox("Test") 
      boolDocumentCompleted = True 
     Catch ex As Exception 
      'MsgBox("Test") 
      Throw 
     End Try 
    End Sub 

    Public Sub LoadPage() 
     'Me.PageUrl = PageUrl 
     Dim thrCurrent As New Thread(New ThreadStart(AddressOf BrowsePage)) 
     thrCurrent.SetApartmentState(ApartmentState.STA) 
     thrCurrent.Start() 
     thrCurrent.Join() 
    End Sub 

    Private Sub BrowsePage() 
     Try 
      Dim BrowsePage As New WebBrowser() 
      BrowsePage.ScrollBarsEnabled = False 
      AddHandler BrowsePage.DocumentCompleted, AddressOf _ 
    WebBrowser_DocumentCompleted 
      BrowsePage.ScrollBarsEnabled = True 
      BrowsePage.ScriptErrorsSuppressed = False 
      'BrowsePage.DocumentText = "http://pcname/app/TestWebBrowser.aspx" 
      BrowsePage.Navigate("http://pcname/app/TestWebBrowser.aspx") 
      While boolDocumentCompleted = False 
       'intTest = intTest + 1 
       'While BrowsePage.ReadyState <> WebBrowserReadyState.Complete 
       Application.DoEvents() 
      End While 
      BrowsePage.Dispose() 
     Catch ex As Exception 
      Throw 
     End Try 
    End Sub 
End Class 

Ich habe ein Fenster bildet App, die ruft: LoadPage()

Soweit ich bin besorgt; die folgende Webseite sollte aufgerufen werden:

http://pcname/app/TestWebBrowser.aspx. Dies geschieht jedoch nicht. Ich habe Thread.Sleep(30000) auf die Webseite hinzugefügt, WebBrowser_DocumentCompleted jedoch sofort erreicht ist (es soll, weil mindestens 30 Sekunden dauert die Thread.Sleep(30000). Was mit dem Code falsch?

+0

Ich habe eine neue Regel für VB-Programmierung: Wenn Sie Thread.sleep() in Ihrem Code aufrufen müssen, tun Sie wahrscheinlich etwas falsch. – ChicagoMike

Antwort

0

Wie für Ihren Browser die Seite nicht beim Start geladen wird, wenn alle der Code, den du präsentierst, ist der einzige Code in deinem Projekt als dein fehlender Sub, der zum Programmstart gestartet wird. Zum Beispiel sollte die Änderung Public Sub LoadPage() zu Public Sub LoadPage(sender as Object, e as EventArgs) Handles MyBase.Load das Problem nicht beim Start laden behandeln, aber es ist auch nicht das einzige Problem, das ich sehen kann, Wenn Sie mehrere Threads verwenden, können Sie nicht einfach direkt von einem anderen Thread aus aufrufen. (Siehe Beispiele hier unter:Microsoft Thread-Safe Calls to Form Controls) oder eine einfachere Route wäre, den separaten Thread für t einfach zu entfernen er Browser seit vielen Orten ive sah beim Versuch, Browser auf einige meiner Projekte zu verwenden, sah ich dies:

Webbrowser sind standardmäßig asynchron, so dass Sie sie nicht fädeln müssen.

Auch diese Linie hier: Dim BrowsePage As New WebBrowser() Ihr neues Browser-Steuerung zu schaffen, aber Ihr es nicht mit Me.Controls.Add(BrowsePage) dem Formular hinzugefügt ... Letzte, was ich daran denken kann, wäre ein wenig mehr von Rat wäre, dass seine besten sein eine Variable/Control nicht zu dimmen, um den gleichen Namen wie ein Sub durchzusehen, bemerkte ich, dass Private Sub BrowsePage() & Dim BrowsePage As New WebBrowser() am besten wäre, um sie zwei verschiedene Namen zu machen, so dass Sie sich nicht beim Schreiben von Code verwechseln und versehentlich das Sub verwenden, wenn Sie bedeutet, die Variable zu verwenden.

Verwandte Themen