Här är ett nedskärningsexempel på hur man gör Asychrounous Work med VB.Net 4.0.
Låt oss föreställa dig att du har ett formulär som har följande importer,
Imports System.Windows.Forms
Imports System.Threading
Imports System.Threading.Tasks
Det formuläret har två kontroller
Private WithEvents DoSomthing As Button
Private WithEvents Progress As ProgressBar
Någonstans i din ansökan har vi en Function
kallas ExecuteSlowStuff
, den här funktionen motsvarar din executeMyQuery
. Den viktiga delen är Action
parameter som funktionen använder för att visa att den gör framsteg.
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
Låt säga att detta arbete startas genom att klicka på DoSomething
Button
.
Private Sub Start() Handled DoSomething.Click
Dim slowStuff = Task(Of Integer).Factory.StartNew(
Function() ExceuteSlowStuff(AddressOf Me.ShowProgress))
End Sub
Du undrar förmodligen var ShowProgress
kommer från, det är det stökigaste.
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
Observera att eftersom ShowProgress
kan anropas från en annan tråd, letar den efter anrop över trådar. I så fall åberopar den sig själv på huvudtråden.