Aquí hay un ejemplo reducido de cómo hacer trabajo asíncrono con VB.Net 4.0.
Imaginemos que tiene un formulario que tiene las siguientes importaciones,
Imports System.Windows.Forms
Imports System.Threading
Imports System.Threading.Tasks
Ese formulario tiene dos controles
Private WithEvents DoSomthing As Button
Private WithEvents Progress As ProgressBar
En algún lugar de su aplicación tenemos una Function
llamado ExecuteSlowStuff
, esta función es el equivalente de su executeMyQuery
. La parte importante es la Action
parámetro que la función usa para mostrar que está progresando.
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
Digamos que este trabajo se inicia con el clic de DoSomething
Button
.
Private Sub Start() Handled DoSomething.Click
Dim slowStuff = Task(Of Integer).Factory.StartNew(
Function() ExceuteSlowStuff(AddressOf Me.ShowProgress))
End Sub
Probablemente se esté preguntando dónde ShowProgress
viene, esa es la parte más complicada.
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
Tenga en cuenta que debido a que ShowProgress
se puede invocar desde otro subproceso, comprueba las llamadas entre subprocesos. En ese caso, se invoca a sí mismo en el hilo principal.