Voici un exemple réduit de la façon de faire un travail asynchrone avec VB.Net 4.0.
Imaginons que vous ayez un formulaire contenant les importations suivantes,
Imports System.Windows.Forms
Imports System.Threading
Imports System.Threading.Tasks
Ce formulaire a deux contrôles
Private WithEvents DoSomthing As Button
Private WithEvents Progress As ProgressBar
Quelque part dans votre application, nous avons une Function
appelé ExecuteSlowStuff
, cette fonction est l'équivalent de votre executeMyQuery
. La partie importante est l'Action
paramètre que la fonction utilise pour montrer qu'elle progresse.
Private Shared Function ExecuteSlowStuff(ByVal progress As Action) As Integer
Dim result = 0
For i = 0 To 10000
result += i
Thread.Sleep(500)
progress()
Next
Return result
End Function
Disons que ce travail est commencé par le clic du DoSomething
Button
.
Private Sub Start() Handled DoSomething.Click
Dim slowStuff = Task(Of Integer).Factory.StartNew(
Function() ExceuteSlowStuff(AddressOf Me.ShowProgress))
End Sub
Vous vous demandez probablement où ShowProgress
vient, c'est la partie la plus compliquée.
Private Sub ShowProgress()
If Me.Progress.InvokeRequired Then
Dim cross As new Action(AddressOf Me.ShowProgress)
Me.Invoke(cross)
Else
If Me.Progress.Value = Me.Progress.Maximum Then
Me.Progress.Value = Me.Progress.Minimum
Else
Me.Progress.Increment(1)
End If
Me.Progress.Refresh()
End if
End Sub
Notez que parce que ShowProgress
peut être appelé à partir d'un autre thread, il vérifie les appels inter-thread. Dans ce cas, il s'invoque sur le thread principal.