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
|
Imports System.Threading
Public Class Form1
'Petite fonction bien connue des étudiants en informatique
Function Factorielle(ByVal n As Integer) As Integer
If n = 1 Then
Return 1
Else
'Petite pause afin de pouvoir constater le résultat attendu
Thread.Sleep(500)
Return n * Factorielle(n - 1)
End If
End Function
'Déclaration d'un délégué
' dont la signature doit être la même que la fonction appelée
Delegate Function CalculFactorielle(ByVal n As Integer) As Integer
'Instanciation de notre délégué avec l'adresse de notre fonction
Dim FactorielleAsynchrone As CalculFactorielle
FactorielleAsynchrone = New CalculFactorielle(AddressOf Factorielle)
'IAsyncResult est un objet retourné par BeginInvoke
' pour récupérer le résultat de la fonction invoquée
Dim Resultat As IAsyncResult
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'
Resultat = FactorielleAsynchrone.BeginInvoke(5, Nothing, Nothing)
'A ce niveau, nous constatons que button1_click a repris la main.
'Nous attendons que notre fonction termine son traitement.
While Not Resultat.IsCompleted
TextBox1.Text = "Traitement en cours"
TextBox1.Refresh()
End While
'Notre Traitement terminé, nous affichons le résultat
' via la méthode EndInvoke
TextBox1.Text = FactorielleAsynchrone.EndInvoke(Resultat)
End Sub
End Class |
Partager