Imports System.ComponentModel
Public Class Form1
Private browsersByWorkers As New Dictionary(Of BackgroundWorker, WebBrowser)
Private Sub CreateWebBrowsers()
Dim urls As String() 'Retrieve URLs and store here.
Dim browser As WebBrowser
For Each url As String In urls
browser = New WebBrowser
'Set properties of browser here and add to UI.
AddHandler browser.DocumentCompleted, AddressOf WebBrowser_DocumentCompleted
browser.Navigate(url)
Next url
End Sub
Private Sub WebBrowser_DocumentCompleted(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
Dim browser As WebBrowser = TryCast(sender, WebBrowser)
If browser IsNot Nothing Then
Dim worker As New BackgroundWorker
Me.browsersByWorkers.Add(worker, browser)
AddHandler worker.DoWork, AddressOf BackgroundWorker_DoWork
AddHandler worker.RunWorkerCompleted, AddressOf BackgroundWorker_RunWorkerCompleted
worker.RunWorkerAsync()
End If
End Sub
Private Sub BackgroundWorker_DoWork(ByVal sender As System.Object, _
ByVal e As System.ComponentModel.DoWorkEventArgs)
Dim worker As BackgroundWorker = TryCast(sender, BackgroundWorker)
If worker IsNot Nothing Then
Dim browser As WebBrowser = Me.browsersByWorkers(worker)
If browser IsNot Nothing Then
'Do your work here. Note that this method is being executed in a worker thread so any access of
'members of the WebBrowser control must be done either via delegation or the ReportProgress method
'and the ProgressChanged event.
End If
End If
End Sub
Private Sub BackgroundWorker_RunWorkerCompleted(ByVal sender As Object, _
ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs)
Dim worker As BackgroundWorker = TryCast(sender, BackgroundWorker)
If worker IsNot Nothing Then
MessageBox.Show("Operation complete for URL " & Me.browsersByWorkers(worker).Url.AbsolutePath)
End If
End Sub
End Class