Mega Code Archive

 
Categories / C# / WPF
 

Show a Continuous Progress Bar While Processing on a Background 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" Height="100" Width="200">     <StackPanel>         <ProgressBar Name="progressBar"/>         <Button Name="button" Click="button_Click">Start</Button>     </StackPanel> </Window> //File:Window.xaml.cs using System.ComponentModel; using System.Threading; using System.Windows; using System.Windows.Input; namespace WpfApplication1 {     public partial class Window1 : Window     {         private BackgroundWorker worker = new BackgroundWorker();         public Window1()         {             InitializeComponent();             worker.WorkerSupportsCancellation = true;             worker.DoWork += new DoWorkEventHandler(worker_DoWork);             worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);         }         private void button_Click(object sender, RoutedEventArgs e)         {             if (!worker.IsBusy)             {                 this.Cursor = Cursors.Wait;                 progressBar.IsIndeterminate = true;                 button.Content = "Cancel";                 worker.RunWorkerAsync();             }             else             {                 worker.CancelAsync();             }         }         private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)         {             this.Cursor = Cursors.Arrow;             if (e.Error != null)             {                 MessageBox.Show(e.Error.Message);             }             button.Content = "Start";             progressBar.IsIndeterminate = false;         }         private void worker_DoWork(object sender, DoWorkEventArgs e){             for (int i = 1; i <= 100; i++)             {                 if (worker.CancellationPending)                     break;                 Thread.Sleep(50);             }         }     } }