1

webbrowserがページをロードするまでどのように待つことができますか?
私は試した:

webbrowser1.navigate(url)
msgbox("done")
4

3 に答える 3

8

これは私が同じ問題を抱えていたときに使用したアプローチです。ハンドラーを追加することで、不要な処理にタイマーを使用する必要がなくなり、代わりにドキュメントが読み込まれるとすぐにイベントが発生します。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

これが最善の方法だと言っているわけではありませんが、私にとってはうまくいきました:)

于 2012-06-19T11:39:29.760 に答える
1
Do While wb.ReadyState <> WebBrowserReadyState.Complete
    Application.DoEvents()
Loop
于 2012-06-19T11:17:23.687 に答える
0

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
于 2015-08-27T12:46:34.617 に答える