请参阅以下代码:
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秒。代码有什么问题?
答案 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。