[英]VB.NET AutoResetEvent
我正在嘗試了解有關事件處理的更多信息。 我嘗試在下面編寫代碼,但由於某種原因似乎無法正常工作。 我想做的是導航到一個url,等到它加載后再運行msgbox。
知道我在做什么錯嗎?
Private Shared event_1 As New AutoResetEvent(False)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
WebBrowser1.Navigate("http://google.com")
AddHandler WebBrowser1.DocumentCompleted, New WebBrowserDocumentCompletedEventHandler(AddressOf wb)
event_1.WaitOne()
MsgBox("The page is finished loading ")
End Sub
Private Sub wb(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
If e.Url.AbsolutePath <> TryCast(sender, WebBrowser).Url.AbsolutePath Then
Return
End If
event_1.Set()
End Sub
您可以像這樣在WebBrowser1對象上捕獲DocumentCompleted事件:
Private Sub webBrowser1_DocumentCompleted(ByVal sender As Object, _
ByVal e As WebBrowserDocumentCompletedEventArgs) _
Handles webBrowser1.DocumentCompleted
MsgBox("THe page is loaded")
End Sub
在此處查看示例: http : //msdn.microsoft.com/zh-cn/library/system.windows.forms.webbrowser.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2
發出event_1.WaitOne()
,主線程被阻止。 包括WebBrowser。 因此, event_1.Set()
將永遠不會執行。
但是,您可以使用不同的方法來實現相同的行為。 不使用事件。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Me.Enabled = False ' if you realy want to block the UI as well
WebBrowser1.Navigate("http://www.google.com")
Do
Application.DoEvents()
Loop Until WebBrowser1.ReadyState = WebBrowserReadyState.Complete
MsgBox("The page is finished loading ")
Me.Enabled = True ' re-enable the UI
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.