' The worker process for data retrieval. Simulates a
' time-consuming operation by using Thread.Sleep.
Public Sub GetPersons(ByVal itemsCount As Integer, _
ByVal Name As String, _
ByVal asyncOperation As AsyncOperation)
Dim canceled As Boolean = False
Dim exception As Exception = Nothing
Dim personList As New List(Of Person)()
Dim i As Integer = 1
While i <= itemsCount OrElse itemsCount = 0
Dim currentName As String = Name + CStr(i)
personList.Add(New Person() With { _
.Name = currentName, _
.Age = i, _
.Birthday = DateTime.Today.AddYears(-i), _
.Available = (i Mod 2 = 0) _
})
' Delay 1 second for each person.
Thread.Sleep(1000)
' Report progress by using AsyncOperation to raise
' the ProgressChanged event. Pass in itemsCount of
' zero to see effect of catching an exception.
Dim percentComplete As Integer
Try
percentComplete = Convert.ToInt32(i * 100 / itemsCount)
Catch ex As Exception
exception = ex
Exit While
End Try
Dim progressChangedEventArgs As _
New GetPersonsProgressChangedEventArgs _
(currentName, _
percentComplete, _
asyncOperation.UserSuppliedState)
asyncOperation.Post _
(AsyncOpProgressReportHandler, progressChangedEventArgs)
If GetPersonsCheckForCancellation _
(asyncOperation.UserSuppliedState) Then
canceled = True
Exit While
End If
i += 1
End While
' Report completion by raising the Completed event.
Dim completedEventArgs As _
New GetPersonsCompletedEventArgs _
(personList, _
exception, _
canceled, _
asyncOperation.UserSuppliedState)
asyncOperation.PostOperationCompleted _
(AsyncOpCompletedHandler, completedEventArgs)
End Sub