Đây là một ví dụ cụ thể về cách thực hiện Asychrounous Work với VB.Net 4.0.
Hãy tưởng tượng bạn có một biểu mẫu có các lần nhập sau,
Imports System.Windows.Forms
Imports System.Threading
Imports System.Threading.Tasks
Biểu mẫu đó có hai điều khiển
Private WithEvents DoSomthing As Button
Private WithEvents Progress As ProgressBar
Ở đâu đó trong ứng dụng của bạn, chúng tôi có Function
được gọi là ExecuteSlowStuff
, hàm này tương đương với executeMyQuery
của bạn . Phần quan trọng là Action
tham số mà hàm sử dụng để hiển thị nó đang tiến triển.
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
Giả sử công việc này được bắt đầu bằng cách nhấp vào DoSomething
Nút Button
.
Private Sub Start() Handled DoSomething.Click
Dim slowStuff = Task(Of Integer).Factory.StartNew(
Function() ExceuteSlowStuff(AddressOf Me.ShowProgress))
End Sub
Có thể bạn đang thắc mắc ShowProgress
ở đâu đến từ, đó là bit lộn xộn hơn.
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
Lưu ý rằng vì ShowProgress
có thể được gọi từ một luồng khác, nó kiểm tra các cuộc gọi luồng chéo. Trong trường hợp đó, nó tự gọi ra trên chuỗi chính.