これは、VB.Net4.0でAsychrounousWorkを実行する方法の縮小例です。
次のインポートがあるフォームがあると想像してみましょう。
Imports System.Windows.Forms
Imports System.Threading
Imports System.Threading.Tasks
そのフォームには2つのコントロールがあります
Private WithEvents DoSomthing As Button
Private WithEvents Progress As ProgressBar
アプリケーションのどこかに関数
があります ExecuteSlowStuff
と呼ばれます 、この関数は executeMyQuery
と同等です 。重要な部分はアクション
です 関数が進行中であることを示すために使用するパラメーター。
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
この作業は、 DoSomething
をクリックすることで開始されたとしましょう。 ボタンコード> 。
Private Sub Start() Handled DoSomething.Click
Dim slowStuff = Task(Of Integer).Factory.StartNew(
Function() ExceuteSlowStuff(AddressOf Me.ShowProgress))
End Sub
あなたはおそらくShowProgress
がどこにあるのか疑問に思っているでしょう から来ています、それは厄介なビットです。
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
ShowProgress
のため、注意してください 別のスレッドから呼び出すことができ、クロススレッド呼び出しをチェックします。その場合、メインスレッドで自分自身を呼び出します。