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,

你可以这样做: 声明 arrayBackgroundWorkers

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 代码中进行适当的修改。

试试这个。希望这有帮助。