Mega Code Archive

 
Categories / VB.Net / WPF
 

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