【问题标题】:WebBrowser control not launching webpageWebBrowser 控件未启动网页
【发布时间】:2016-06-27 11:43:30
【问题描述】:

请看下面的代码:

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 秒。代码有什么问题?

【问题讨论】:

  • 我想出了一个 VB 编程的新规则:如果您需要在代码中调用 Thread.sleep(),那么您可能做错了。

标签: .net vb.net multithreading


【解决方案1】:

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

网络浏览器默认是异步的,所以你不需要线程化它们。

这里也是这一行:Dim BrowsePage As New WebBrowser() 您创建了一个新的浏览器控件,但您没有使用Me.Controls.Add(BrowsePage) 将其添加到表单中...我能想到的最后一件事就是更多的建议是它最好不要将变量/控件变暗,使其与查看的子名称相同当您打算使用变量时,请使用 sub。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多