Berikut ini adalah contoh singkat bagaimana melakukan Asychrounous Work dengan VB.Net 4.0.
Bayangkan Anda memiliki formulir yang memiliki impor berikut,
Imports System.Windows.Forms
Imports System.Threading
Imports System.Threading.Tasks
Formulir itu memiliki dua kontrol
Private WithEvents DoSomthing As Button
Private WithEvents Progress As ProgressBar
Di suatu tempat di aplikasi Anda, kami memiliki Function
disebut ExecuteSlowStuff
, fungsi ini setara dengan executeMyQuery
Anda . Bagian yang penting adalah Action
parameter yang digunakan fungsi untuk menunjukkan kemajuan.
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
Katakanlah pekerjaan ini dimulai dengan mengklik DoSomething
Button
.
Private Sub Start() Handled DoSomething.Click
Dim slowStuff = Task(Of Integer).Factory.StartNew(
Function() ExceuteSlowStuff(AddressOf Me.ShowProgress))
End Sub
Anda mungkin bertanya-tanya di mana ShowProgress
berasal, itulah bagian yang lebih berantakan.
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
Perhatikan bahwa karena ShowProgress
dapat dipanggil dari utas lain, ia memeriksa panggilan lintas utas. Dalam hal ini ia memanggil dirinya sendiri di utas utama.