Hier ist ein reduziertes Beispiel für Asychrounous Work mit VB.Net 4.0.
Stellen wir uns vor, Sie haben ein Formular mit den folgenden Importen:
Imports System.Windows.Forms
Imports System.Threading
Imports System.Threading.Tasks
Dieses Formular hat zwei Steuerelemente
Private WithEvents DoSomthing As Button
Private WithEvents Progress As ProgressBar
Irgendwo in Ihrer Anwendung haben wir eine Function
namens ExecuteSlowStuff
, diese Funktion ist das Äquivalent zu Ihrer executeMyQuery
. Der wichtige Teil ist die Action
Parameter, mit dem die Funktion anzeigt, dass sie Fortschritte macht.
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
Nehmen wir an, diese Arbeit wird durch den Klick auf DoSomething
gestartet Button
.
Private Sub Start() Handled DoSomething.Click
Dim slowStuff = Task(Of Integer).Factory.StartNew(
Function() ExceuteSlowStuff(AddressOf Me.ShowProgress))
End Sub
Sie fragen sich wahrscheinlich, wo ShowProgress
kommt von, das ist der unordentlichere Teil.
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
Beachten Sie, dass ShowProgress
von einem anderen Thread aufgerufen werden kann, prüft er auf Cross-Thread-Aufrufe. In diesem Fall ruft es sich selbst im Haupt-Thread auf.