1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| ' Définition des signatures d'évènements
Public Delegate Sub NewPersonEventHandler(sender As Object, e As NewPersonEventArgs)
Public Delegate Sub GetPersonsCompletedEventHandler(sender As Object, e As GetPersonsCompletedEventArgs)
' Définition des paramètres de l'évènement NewPerson
Public Class NewPersonEventArgs
Inherits EventArgs
Public Sub New(p As Person)
Me._person = p
End Sub
Private _person As Person
Public ReadOnly Property Person() As Person
Get
Return _person
End Get
End Property
End Class
' Définition des paramètres de l'évènement GetPersonsCompleted
Public Class GetPersonsCompletedEventArgs
Inherits EventArgs
Public Sub New(lstPersons As IEnumerable(Of Person))
Me._persons = New List(Of Person)(lstPersons)
End Sub
Private _persons As List(Of Person)
Public ReadOnly Property Persons() As IList(Of Person)
Get
Return _persons
End Get
End Property
End Class
' Code du traitement
Public Class PersonsData
Public Event NewPerson As NewPersonEventHandler
Public Event GetPersonsCompleted As GetPersonsCompletedEventHandler
Public Sub StartGetPersons()
Dim bgw As New BackgroundWorker
bgw.WorkerReportsProgress = True
AddHandler bgw.DoWork, AddressOf bgw_DoWork
AddHandler bgw.ProgressChanged, AddressOf bgw_ProgressChanged
AddHandler bgw.RunWorkerCompleted, AddressOf bgw_RunWorkerCompleted
bgw.RunWorkerAsync
End Sub
Private Sub bgw_DoWork(sender As Object, e As DoWorkEventArgs)
Dim bgw As BackgroundWorker = DirectCast(sender, BackgroundWorker)
Dim lst As New List(Of Person)
' Boucle de traitement
For ...
Dim p As Person = ... ' Code pour récupérer ou créer la personne
lst.Add(p)
bgw.ProgressChanged(0, p)
Next
e.Result = lst
End Sub
Private Sub bgw_ProgressChanged(sender As Object, e As ProgressChangedEventArgs)
Dim p As Person = DirectCast(e.UserState, Person)
RaiseEvent NewPerson(Me, New NewPersonEventArgs(p))
End Sub
Private Sub bgw_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
Dim lst As List(Of Person) = DirectCast(e.Result, List(Of Person))
RaiseEvent GetPersonsCompleted(Me, New GetPersonsCompletedEventArgs(lst)
End Sub
End Class |
Partager