いつもお世話になっています
ThreadWB = New Thread(New ThreadStart(AddressOf WBThread))
ThreadWB.SetApartmentState(ApartmentState.STA)
なスレッドの中で
Private Sub WBThread()
Do
' ここでキューを待機している
Do While QWB.Count > 0
RqsUrl = QWB.Dequeue
If RqsURL <> "" AndAlso RqsURL <> "about:blank" Then
Using WB As New WebBrowser
WB.Visible = False
WB.ScriptErrorsSuppressed = True
AddHandler WB.DocumentCompleted, AddressOf WB_DocumentCompleted
Tim_WB.Start() ' このタイマーは処理終了のため
WB.Navigate(New Uri(RqsURL))
' DummyLoop
For i As Integer = 0 To 100
Threading.Thread.Sleep(100)
Application.DoEvents()
Next
' DummyLoopEnd
' ここでタイマーからの終了の合図を待つ
End Using
System.GC.Collect()
End If
Loop
Loop
End Sub
とやっているのですがこのダミーループ部分が無いとDocumentCompletedが発生しません
Application.DoEvents無しでThread.Sleepだけでも発生しません
10000回程ループを回せばApplication.DoEventsだけでも発生します
なのでなるだけ少ないループで確実に発生させるためにこのような形になりました
要はこのダミーループが回っているうちにDocumentCompletedが発生しないといけないようです
Application.DoEventsはできれば使いたくないのですが他に何か方法はありますでしょうか