webbrowserがページをロードするまでどのように待つことができますか?
私は試した:
webbrowser1.navigate(url)
msgbox("done")
これは私が同じ問題を抱えていたときに使用したアプローチです。ハンドラーを追加することで、不要な処理にタイマーを使用する必要がなくなり、代わりにドキュメントが読み込まれるとすぐにイベントが発生します。documentcompletedという名前に騙されないでください。実際には、Webページがロードされるのを待っています。
AddHandler (webbrowser1.DocumentCompleted), AddressOf WebpageLoaded
webbrowser1.Navigate(url)
Public Sub WebpageLoaded(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
MessageBox.Show("Done")
End Sub
これが最善の方法だと言っているわけではありませんが、私にとってはうまくいきました:)
Do While wb.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
Loop
WebBrowserコントロールから新しいクラスを継承します。
Public Class WebBrowserSyncFW
Inherits WebBrowser
Public Async Function NavigateSync(ByVal urlString As String, Optional ByVal timeoutmillisec As Integer = 30000) As Task(Of Boolean)
Dim IsLoaded As Boolean = False
Me.ScriptErrorsSuppressed = True
Me.Navigate(urlString)
AddHandler Me.DocumentCompleted, Sub(sender As Object, e As WebBrowserDocumentCompletedEventArgs)
IsLoaded = True
End Sub
For i = 1 To timeoutmillisec / 100
Await Task.Delay(100).ConfigureAwait(False)
If IsLoaded = True Then Return True
Next
Return False
End Function
End Class
使用法:
If Await WebBrowserSyncFW1.NavigateSync("http://www.youtube.com") Then
MsgBox("Page is loaded!", MsgBoxStyle.Information)
Else
MsgBox("Timeout!", MsgBoxStyle.Exclamation)
End If