Support the Cancellation of a Background Worker Thread
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WPF" Width="230" Height="148" >
<StackPanel>
<Button Click="StartStop_Click" Name="btnStartStop" Height="34">Start</Button>
<TextBlock Name="txtBiggestPrime" Margin="5" />
</StackPanel>
</Window>
//File:Window.xaml.vb
Imports System
Imports System.ComponentModel
Imports System.Windows
Namespace WpfApplication1
Public Partial Class Window1
Inherits Window
Private worker As New BackgroundWorker()
Private from As Long = 2
Private [to] As Long = 2000
Private biggestPrime As Long
Public Sub New()
MyBase.New()
InitializeComponent()
worker.WorkerSupportsCancellation = True
AddHandler worker.DoWork, New DoWorkEventHandler(AddressOf worker_DoWork)
AddHandler worker.RunWorkerCompleted, New RunWorkerCompletedEventHandler(AddressOf worker_RunWorkerCompleted)
End Sub
Private Sub StartStop_Click(sender As Object, e As RoutedEventArgs)
If Not worker.IsBusy Then
worker.RunWorkerAsync()
btnStartStop.Content = "Cancel"
txtBiggestPrime.Text = String.Empty
Else
worker.CancelAsync()
End If
End Sub
Private Sub worker_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
If e.Cancelled Then
MessageBox.Show("Operation was canceled")
End If
btnStartStop.Content = "Start"
txtBiggestPrime.Text = biggestPrime.ToString()
End Sub
Private Sub worker_DoWork(sender As Object, e As DoWorkEventArgs)
For current As Long = from To [to]
If worker.CancellationPending Then
e.Cancel = True
Return
End If
biggestPrime = current
Next
End Sub
End Class
End Namespace
Related examples in the same category