请参阅下面的代码:
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秒钟。代码有什么问题?
至于浏览器不加载启动页面,如果您的介绍是项目中唯一的代码,而不是缺少在程序加载下启动的子,例如更改Public Sub LoadPage()
对于Public Sub LoadPage(sender as Object, e as EventArgs) Handles MyBase.Load
,应处理在启动问题上未加载的,但它也不是我可以看到的唯一问题,当使用多个线程时,您不能简单地调用。: Microsoft线程安全呼叫以形成控件)或更容易的路线就是仅删除浏览器的单独线程,因为我在尝试在我的某些项目上使用浏览器时的许多地方看起来都很好处,我看到了这一点:
WebBrowsers默认是异步的,因此您无需线程。
此处也在这里:Dim BrowsePage As New WebBrowser()
您创建一个新的浏览器控件,但您没有将其添加到Me.Controls.Add(BrowsePage)
的表单中...我能想到的最后一件事是,最好的建议是最好不要昏暗一个变量/控件是与副观察相同的名称,我注意到您做了Private Sub BrowsePage()
&amp; Dim BrowsePage As New WebBrowser()
最好使它们在编写代码时不混淆自己的两个不同的名称,并在您打算使用该变量时不小心使用了子。