Я использую таймер и просто наблюдаю за изменением содержимого определенных элементов.
Private AJAXTimer As New Timer
Private Sub WaitHandler1(ByVal sender As Object, ByVal e As System.EventArgs)
'Confirm that your AJAX operation has completed.
Dim ProgressBar = Browser1.Document.All("progressBar")
If ProgressBar Is Nothing Then Exit Sub
If ProgressBar.Style.ToLower.Contains("display: none") Then
'Stop listening for ticks
AJAXTimer.Stop()
'Clear the handler for the tick event so you can reuse the timer.
RemoveHandler AJAXTimer.Tick, AddressOf CoveragesWait
'Do what you need to do to the page here...
'If you will wait for another AJAX event, then set a
'new handler for your Timer. If you are navigating the
'page, add a handler to WebBrowser.DocumentComplete
End If
Exit Sub
Private Function InvokeMember(ByVal FieldName As String, ByVal methodName As String) As Boolean
Dim Field = Browser1.Document.GetElementById(FieldName)
If Field Is Nothing Then Return False
Field.InvokeMember(methodName)
Return True
End Function
У меня есть 2 объекта, которые получают обработчики событий, WebBrowser и Timer.
Я в основном полагаюсь на событие DocumentComplete в WebBrowser и событие Tick на таймере.
Я пишу обработчики DocumentComplete или Tick для каждого требуемого действия, и каждый обработчик будет обычно сам RemoveHandler, поэтому успешное событие будет обработано только один раз. У меня также есть процедура RemoveHandlers, которая удалит все обработчики из браузера и таймера.
Мои команды AJAX обычно выглядят так:
AddHandler AJAXTimer.Tick, AddressOf WaitHandler1
InvokeMember("ContinueButton", "click")
AJAXTimer.Start
Мои команды навигации, такие как:
AddHandler Browser1.DocumentComplete, AddressOf AddSocialDocComp
Browser1.Navigate(NextURL) 'or InvokeMember("ControlName", "click") if working on a form.