VB.Net
Viendo artículo
Desarrollador: No estás conectado
Fecha: 25/05/2020 18:44:49
BackgroundWorker
' Indicamos (por ejemplo en el evento Load) que el BackgroundWorker va a informar sobre el progreso 
...
Me.BackgroundWorker.WorkerReportsProgress = True
...


' Evento que realiza la operación asíncrona
Private Sub BackgroundWorker_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker.DoWork

    For x As Integer = 0 To 100
        Threading.Thread.Sleep(100)  
        Me.BackgroundWorker.ReportProgress(1)
    Next

End Sub

' Evento que actualiza la progressbar para que el usuario vea la evolución de la operación
Private Sub BackgroundWorker_ProgressChanged(sender As System.Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker.ProgressChanged
 
   Me.ProgressBar1.Value += e.ProgressPercentage

End Sub
' Evento que muestra una alerta para informar al usuario de que la operación asíncrona ha finalizado (ya sea porque el usuario la ha cancelado, se ha producido un erorr, o ha finalizado correctamente)
Private Sub BackgroundWorker_RunWorkerCompleted(sender As System.Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker.RunWorkerCompleted

    If e.Cancelled Then
        MessageBox.Show("La operación ha sido cancelada.")
    Else If e.Error IsNot Nothing Then
        MessageBox.Show("Se ha producido un error durante la ejecución: " & e.Error.Message)
    Else
        MessageBox.Show("La operación en segundo plano ha finalizado con éxito.")
    End If

End Sub
' Indicamos (por ejemplo en el evento Load) que queremos que el backgroundworker tenga cancelación
Me.BackgroundWorker.WorkerSupportsCancellation = True

' Evento que cancela la tarea asíncrona si estuviera todavía en ejecución
Private Sub btnCancelarTarea_Click(sender As System.Object, e As System.EventArgs) Handles btnCancelartarea.Click

    If Me.BackgroundWorker.WorkersSupportsCancellation = True Then
        Me.btnCancelarTarea.Enabled = False
        Me.BackgroundWorker.CancelAsync()
    End If

End Sub

' Iniciamos la tarea asíncroma
BackgroundWorker.RunWorkerAsync()