Mega Code Archive

 
Categories / C# / 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.cs using System; using System.ComponentModel; using System.Windows; namespace WpfApplication1 {     public partial class Window1 : Window     {         private BackgroundWorker worker = new BackgroundWorker();         private long from = 2;         private long to = 20000;         private long biggestPrime;         public Window1() : base()         {             InitializeComponent();             worker.WorkerReportsProgress = true;             worker.DoWork += new DoWorkEventHandler(worker_DoWork);             worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);             worker.ProgressChanged += worker_ProgressChanged;         }         private void StartStop_Click(object sender, RoutedEventArgs e)         {             worker.RunWorkerAsync();             btnStartStop.IsEnabled = false;             txtBiggestPrime.Text = string.Empty;         }         private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)         {             btnStartStop.IsEnabled = true;             txtBiggestPrime.Text = biggestPrime.ToString();         }         private void worker_DoWork(object sender, DoWorkEventArgs e)         {             for(long current = from; current <= to; current++){                 biggestPrime = current;                 int percentComplete = Convert.ToInt32(((double) current / to) * 100d);                 worker.ReportProgress(percentComplete);                 System.Threading.Thread.Sleep(10);             }         }         private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)         {             txtPercent.Text = e.ProgressPercentage.ToString() + "%";         }     } }