A Cancellable ProgressBar While Processing on a Background Thread : ProgressBar « UI Controls « Silverlight






A Cancellable ProgressBar While Processing on a Background Thread

    

<UserControl x:Class='SilverlightApplication3.MainPage'
    xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' 
    xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
    xmlns:d='http://schemas.microsoft.com/expression/blend/2008' 
    xmlns:mc='http://schemas.openxmlformats.org/markup-compatibility/2006' 
    mc:Ignorable='d' 
    d:DesignWidth='640' 
    d:DesignHeight='480'>
    <StackPanel>
        <ProgressBar Name="progressBar"/>
        <Button Name="button" Click="button_Click">
            Start
        </Button>
    </StackPanel>
</UserControl>
//File:Window.xaml.cs
using System.ComponentModel;
using System.Threading;
using System.Windows;
using System.Windows.Input;
using System;

using System.Windows.Controls;
namespace SilverlightApplication3
{    
    public partial class MainPage : UserControl
    {
        private BackgroundWorker worker = new BackgroundWorker();

        public MainPage()
        {
            InitializeComponent();
            worker.WorkerReportsProgress = true;
            worker.WorkerSupportsCancellation = true;
            worker.DoWork += new DoWorkEventHandler(worker_DoWork);
            worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
            worker.ProgressChanged += worker_ProgressChanged;
        }

        private void button_Click(object sender, RoutedEventArgs e){
            if(!worker.IsBusy)
            {
                this.Cursor = Cursors.Wait;
                worker.RunWorkerAsync();
                button.Content = "Cancel";
            }else{
                worker.CancelAsync();
            }
        }

        private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.Cursor = Cursors.Arrow;
            if(e.Cancelled)
            {
                Console.WriteLine("Operation was canceled");
            }
            else if(e.Error != null)
            {
                Console.WriteLine(e.Error.Message);
            }

            button.Content = "Start";
        }

        private void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            for(int i = 1; i <= 100; i++)
            {
                if(worker.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }
                Thread.Sleep(100);
                worker.ReportProgress(i);
            }
        }
        private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar.Value = e.ProgressPercentage;
        }
    }
}

   
    
    
    
  








Related examples in the same category

1.Binding ProgressBar with SliderBinding ProgressBar with Slider
2.Show a ProgressBar While Processing on a Background Thread
3.ProgressBar and Animation
4.A basic ProgressBarA basic ProgressBar
5.An indeterminate ProgressBarAn indeterminate ProgressBar
6.IsIndeterminate ProgressBarIsIndeterminate ProgressBar
7.Show a Continuous Progress Bar While Processing on a Background Thread