Track the Progress 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="228" Height="168" >
<StackPanel>
<Button Click="StartStop_Click" Name="btnStartStop">Start</Button>
<TextBlock Name="txtPercent"/>
<TextBlock Name="txtBiggestPrime"/>
</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 = 20000
Private biggestPrime As Long
Public Sub New()
MyBase.New()
InitializeComponent()
worker.WorkerReportsProgress = True
AddHandler worker.DoWork, New DoWorkEventHandler(AddressOf worker_DoWork)
AddHandler worker.RunWorkerCompleted, New RunWorkerCompletedEventHandler(AddressOf worker_RunWorkerCompleted)
AddHandler worker.ProgressChanged, AddressOf worker_ProgressChanged
End Sub
Private Sub StartStop_Click(sender As Object, e As RoutedEventArgs)
worker.RunWorkerAsync()
btnStartStop.IsEnabled = False
txtBiggestPrime.Text = String.Empty
End Sub
Private Sub worker_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
btnStartStop.IsEnabled = True
txtBiggestPrime.Text = biggestPrime.ToString()
End Sub
Private Sub worker_DoWork(sender As Object, e As DoWorkEventArgs)
For current As Long = from To [to]
biggestPrime = current
Dim percentComplete As Integer = Convert.ToInt32((CDbl(current) / [to]) * 100.0)
worker.ReportProgress(percentComplete)
System.Threading.Thread.Sleep(10)
Next
End Sub
Private Sub worker_ProgressChanged(sender As Object, e As ProgressChangedEventArgs)
txtPercent.Text = e.ProgressPercentage.ToString() & "%"
End Sub
End Class
End Namespace
Related examples in the same category