Mega Code Archive

 
Categories / VB.Net Tutorial / WPF
 

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