VB.net zatrzymujący program działający w tle

Chcę utworzyć przycisk, który może zatrzymać mojego pracownika działającego w tle i zakończyć cały proces, nad którym pracuje.

Oto mój przykładowy kod backgroundworker:

       Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

            Try
                If BackgroundWorker1.IsBusy <> True Then
                    BackgroundWorker1.RunWorkerAsync()
                End If
            Catch ex As Exception
            End Try

        End Sub

        Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

            Dim counter As Integer = 1

            Do

            'updated code with stop function----------------
            BackgroundWorker1.WorkerSupportsCancellation = True
            If BackgroundWorker1.CancellationPending Then
                e.Cancel = True
                ProgressBar1.Value = 0
                Exit Do
            End If
            'updated code with stop function----------------

            ListBox1.Items.Add(counter)

            ProgressBar1.Value = ((counter - 1) / limit) * 100
            counter = counter + 1
            Loop While(counter <= 999999999999999999)

        End Sub

        Private Sub BackgroundWorker1_ProgressChanged(sender As System.Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
            Try
            Catch ex As Exception
            End Try
        End Sub

        Private Sub BackgroundWorker1_Completed(sender As System.Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
            Try
            Catch ex As Exception
            End Try
        End Sub

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False    
        End Sub

        'updated code with stop function----------------
        Private Sub StopButton_Click(sender As Object, e As EventArgs) Handles StopButton.Click
              If BackgroundWorker1.IsBusy Then

                  If BackgroundWorker1.WorkerSupportsCancellation Then                
                     BackgroundWorker1.CancelAsync()
                  End If
              End If
        End Sub
        'updated code with stop function----------------

Chcę zresetować pętlę i przywrócić pasek postępu do 0%, gdy zatrzymam program działający w tle.

czy to możliwe?

Powyższy kod został zaktualizowany i teraz działa poprawnie.

Dodałem ten kod do mojej pętli do:

        BackgroundWorker1.WorkerSupportsCancellation = True
        If BackgroundWorker1.CancellationPending Then
            e.Cancel = True
            ProgressBar1.Value = 0
            Exit Do
        End If

Stworzyłem przycisk, który zatrzymuje pracownika:

    Private Sub StopButton_Click(sender As Object, e As EventArgs) Handles StopButton.Click
          If BackgroundWorker1.IsBusy Then

              If BackgroundWorker1.WorkerSupportsCancellation Then                
                 BackgroundWorker1.CancelAsync()
              End If
          End If
    End Sub

questionAnswers(2)

yourAnswerToTheQuestion