Как я могу отменить несколько фоновых рабочих в цикле For? - PullRequest
0 голосов
/ 30 августа 2018

Создание приложения для Windows в Visual Studio 15. Есть форма, в которой я могу запустить до 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

Мне нужно сделать опцию Cancel ALL. Как я могу пройти через все 10 BGWorkers в цикле For? Надеюсь, мой вопрос лучше MCVE.

1 Ответ

0 голосов
/ 30 августа 2018

Как отменить все 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.

Попробуй это. Надеюсь, что это помогает.

...