WPF VB.Net

   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:ComponentModel="clr-namespace:System.ComponentModel;assembly=System"
   Title="WPF" Height="100" Width="200">
    
    
                    x:Key="backgroundWorker"
            WorkerReportsProgress="True"
            WorkerSupportsCancellation="True"
            DoWork="BackgroundWorker_DoWork"
            RunWorkerCompleted="BackgroundWorker_RunWorkerCompleted"
            ProgressChanged="BackgroundWorker_ProgressChanged"/>
    

    
    
        
        Start
    


//File:Window.xaml.vb
Imports System
Imports System.ComponentModel
Imports System.Threading
Imports System.Windows
Imports System.Windows.Input
Namespace WpfApplication1
  Public Partial Class Window1
    Inherits Window
    Private ReadOnly worker As BackgroundWorker
    Public Sub New()
      InitializeComponent()
      worker = TryCast(Me.FindResource("backgroundWorker"), BackgroundWorker)
    End Sub
    Private Sub button_Click(sender As Object, e As RoutedEventArgs)
      If Not worker.IsBusy Then
        Me.Cursor = Cursors.Wait
        worker.RunWorkerAsync()
        button.Content = "Cancel"
      Else
        worker.CancelAsync()
      End If
    End Sub
    Private Sub BackgroundWorker_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs)
      For i As Integer = 1 To 100
        If worker.CancellationPending Then
          Exit For
        End If
        Thread.Sleep(100)
        worker.ReportProgress(i)
      Next
    End Sub
    Private Sub BackgroundWorker_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs)
      Me.Cursor = Cursors.Arrow
      Console.WriteLine(e.[Error].Message)
      button.Content = "Start"
    End Sub
    Private Sub BackgroundWorker_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs)
      progressBar.Value = e.ProgressPercentage
    End Sub
  End Class
End Namespace