2012-06-19 5 views

ответ

-1
Do While wb.ReadyState <> WebBrowserReadyState.Complete 
    Application.DoEvents() 
Loop 
+0

сейчас он работает! :) Спасибо!! – BlackOpty

+2

-1 Для Никаких объяснений, используя [DoEvents] (http://www.codinghorror.com/blog/2004/12/is-doevents-evil.html) и используя Спящий API без необходимости –

+0

первый работает отлично, проверьте это вне, второй действительно Ненужный – nnm

7

Это подход, который я использовал, когда я был с той же проблемой. Добавляя обработчик, вам не нужно использовать таймер для ненужной обработки, вместо этого событие будет срабатывать, как только документ будет загружен. Не обманывайтесь именем документа, завершенным, он действительно ждет загрузки веб-страницы.

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 

Я не говорю, что это лучший способ пойти, но он работал хорошо для меня :)

+0

Благодарим за то, что вы сделали правильный путь. Принимаемый ответ слишком часто используется сегодняшними новыми программистами. –

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 
Смежные вопросы