Track the Progress of a Background Worker Thread : BackgroundWorker « Windows Presentation Foundation « C# / CSharp Tutorial






<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() + "%";
        }
    }
}
WPF Track The Progress Of A Background Worker Thread








24.152.BackgroundWorker
24.152.1.Execute a Method Asynchronously Using a Background Worker ThreadExecute a Method Asynchronously Using a Background Worker Thread
24.152.2.Track the Progress of a Background Worker ThreadTrack the Progress of a Background Worker Thread
24.152.3.Support the Cancellation of a Background Worker ThreadSupport the Cancellation of a Background Worker Thread
24.152.4.Create a Background Worker Thread in XAMLCreate a Background Worker Thread in XAML
24.152.5.Show a ProgressBar While Processing on a Background ThreadShow a ProgressBar While Processing on a Background Thread
24.152.6.Use BackgroundWorker to run task at backgroundUse BackgroundWorker to run task at background
24.152.7.A Cancellable ProgressBar While Processing on a Background ThreadA Cancellable ProgressBar While Processing on a Background Thread
24.152.8.Show a Continuous Progress Bar While Processing on a Background ThreadShow a Continuous Progress Bar While Processing on a Background Thread
24.152.9.Using a BackgroundWorker: progress changed and completedUsing a BackgroundWorker: progress changed and completed
24.152.10.Unblock Thread with BackgroundWorkerUnblock Thread with BackgroundWorker