Option Strict On Public Class Form1 'délégué Private Delegate Sub MonDelegue(ByVal Valeur As Integer) 'structure bidon Structure MaStructure Public d As Integer End Structure 'générateur aléatoire Dim rd As New Random Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim t(1) As Threading.Thread t(0) = New Threading.Thread(AddressOf ThreadJob) t(1) = New Threading.Thread(AddressOf ThreadJob) 'passage d'instances de structures en paramètre de Start t(1).Start(New MaStructure With {.d = 3}) t(0).Start(New MaStructure With {.d = 6}) End Sub Private Sub ThreadJob(ByVal obj As Object) 'cast de l'objet vers le type MaStructure 'on a maintenant l'objet passé au thread Dim struct As MaStructure = DirectCast(obj, MaStructure) Do 'simulation d'un temps de calcul terriblement ennuyeux (avec temps aléatoire) Threading.Thread.Sleep(rd.Next(1000, 3000)) 'renvoi d'une valeur de l'instance de la structure qui a été passée au thread vers le thread appelant SubJob(struct.d) Loop End Sub Private Sub SubJob(ByVal MaValeur As Integer) 'gestion des opérations inter threads If Me.InvokeRequired Then Me.Invoke(New MonDelegue(AddressOf SubJob), MaValeur) Else 'affichage du résultat Me.Text = MaValeur.ToString End If End Sub End Class
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPublic Class Form1 Dim Worker As System.ComponentModel.BackgroundWorker Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For i As Integer = 1 To 20 'il démarre 20 BackgroundWorkers Worker = New System.ComponentModel.BackgroundWorker AddHandler Worker.DoWork, AddressOf Worker_DoWork Worker.WorkerReportsProgress = True Worker.WorkerSupportsCancellation = True Worker.RunWorkerAsync() Next End Sub Private Sub Worker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) 'Tâches à acomplir End Sub End Class