For循环中如何取消多个后台进程?
How can I Cancel Multiple Background Workers in a For loop?
在 Visual Studio 15 中创建 Windows 应用程序。
有一个表单,我可以在其中启动最多 10 个后台工作任务(BG1 到 BG10)。我目前单独取消每个 BGWorker:
Private Sub DSx10C_Click(sender As Object, e As EventArgs) Handles DSx10C.Click
BackgroundWorker10.CancelAsync()
BackgroundWorker10.Dispose()
Label10.Text = "Cancelled"
End Sub
我需要取消所有选项。
如何在 For 循环中遍历所有 10 个 BGWorker?
希望我的问题是一个更好的 MCVE。
如何取消所有BackgroundWorkers
,
你可以这样做:
声明 array
的 BackgroundWorkers
Dim MyBackgroundWorkers() As BackgroundWorker
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'' add all your BackgroundWorkers to the array
MyBackgroundWorkers = New BackgroundWorker() {BackgroundWorker1, BackgroundWorker2, BackgroundWorker3, BackgroundWorker4, BackgroundWorker5}
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'' now you can Cancel all of them in a loop
For Each bgw In MyBackgroundWorkers
If bgw.IsBusy Then
bgw.CancelAsync()
End If
Next
End Sub
这是假设您的 BackgroundWorkers
是您在设计时从工具箱添加的 controls
。如果它是从代码中声明和添加的,则需要在 Form_Load
代码中进行适当的修改。
试试这个。希望这有帮助。
在 Visual Studio 15 中创建 Windows 应用程序。 有一个表单,我可以在其中启动最多 10 个后台工作任务(BG1 到 BG10)。我目前单独取消每个 BGWorker:
Private Sub DSx10C_Click(sender As Object, e As EventArgs) Handles DSx10C.Click
BackgroundWorker10.CancelAsync()
BackgroundWorker10.Dispose()
Label10.Text = "Cancelled"
End Sub
我需要取消所有选项。 如何在 For 循环中遍历所有 10 个 BGWorker? 希望我的问题是一个更好的 MCVE。
如何取消所有BackgroundWorkers
,
你可以这样做:
声明 array
的 BackgroundWorkers
Dim MyBackgroundWorkers() As BackgroundWorker
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'' add all your BackgroundWorkers to the array
MyBackgroundWorkers = New BackgroundWorker() {BackgroundWorker1, BackgroundWorker2, BackgroundWorker3, BackgroundWorker4, BackgroundWorker5}
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'' now you can Cancel all of them in a loop
For Each bgw In MyBackgroundWorkers
If bgw.IsBusy Then
bgw.CancelAsync()
End If
Next
End Sub
这是假设您的 BackgroundWorkers
是您在设计时从工具箱添加的 controls
。如果它是从代码中声明和添加的,则需要在 Form_Load
代码中进行适当的修改。
试试这个。希望这有帮助。