WebBrowser控件不启动网页

时间:2016-06-27 11:43:31

标签: .net vb.net multithreading

请参阅以下代码:

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

我有一个Windows窗体应用,它正在调用:LoadPage()

就我而言;应该调用以下网页:

http://pcname/app/TestWebBrowser.aspx。但是,这种情况并没有发生。我已将Thread.Sleep(30000)添加到网页,但是立即到达了WebBrowser_DocumentCompleted(由于Thread.Sleep(30000),它应该至少需要30秒。代码有什么问题?

1 个答案:

答案 0 :(得分:0)

至于您的浏览器在启动时没有加载页面,如果您所呈现的所有代码是项目中唯一的代码而不是您在程序加载时缺少要启动的子代码,例如将Public Sub LoadPage()更改为{{1应该处理启动时没有加载问题,但它也不是我能看到的唯一问题,当使用多个线程时,你不能直接从另一个线程调用.Navigate而不调用它,(请参见此处的示例: Microsoft Thread-Safe Calls to Form Controls)或者更简单的方法是删除浏览器的单独线程,因为我试图在我的一些项目中使用浏览器时看到很多地方我看到了这个:

  

Web浏览器默认是异步的,因此您不需要对它们进行线程化。

此处此行:Public Sub LoadPage(sender as Object, e as EventArgs) Handles MyBase.Load您创建了一个新的浏览器控件,但是您没有将其添加到包含Dim BrowsePage As New WebBrowser()的表单中...我能想到的最后一件事就是提供更多建议将最好不要将变量/控制调暗为与Sub相同的名称通过我注意到你做了Me.Controls.Add(BrowsePage)&amp; Private Sub BrowsePage()最好使它们成为两个不同的名称,这样你在编写代码时就不会混淆自己,而在意图使用变量时意外使用sub。