Handling the completion of the background task : Thread « Data « Silverlight






Handling the completion of the background task

Handling the completion of the background task
    
<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'>

    <Grid x:Name="LayoutRoot" Background="White" KeyUp="LayoutRoot_KeyUp">
        <ProgressBar x:Name="myProgressBar" Height="30" Width="250" Background="White" BorderBrush="Black" BorderThickness="2">
            <ProgressBar.Foreground>
                <LinearGradientBrush EndPoint="0.5,1.35" StartPoint="1.5,-0.3">
                    <GradientStop Color="#FF67E206" Offset="0"/>
                    <GradientStop Color="Red" Offset="0.4"/>
                    <GradientStop Color="#FF67E206" Offset="1"/>
                </LinearGradientBrush>
            </ProgressBar.Foreground>
        </ProgressBar>
    </Grid>
</UserControl>


//File: Page.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

using System.ComponentModel;
using System.Threading;

namespace SilverlightApplication3
{
    public partial class MainPage : UserControl
    {
        private BackgroundWorker backgroundWorker = null; 

        public MainPage()
        {
            InitializeComponent();

            backgroundWorker = new BackgroundWorker();
            backgroundWorker.WorkerReportsProgress = true; 
            backgroundWorker.WorkerSupportsCancellation = true;                     

            backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
            backgroundWorker.ProgressChanged+= new ProgressChangedEventHandler(backgroundWorker_ProgressChanged);
            backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);

            backgroundWorker.RunWorkerAsync();                                      
        }

        void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            myProgressBar.Visibility = Visibility.Collapsed;
        }

        void  backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            myProgressBar.Value = e.ProgressPercentage;
        }

        void  backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 1; i <= 100; i++)
            {
                if (backgroundWorker.CancellationPending == true)
                    return;

                backgroundWorker.ReportProgress(i);
                Thread.Sleep(25);
            }                                                                       
        }

        private void LayoutRoot_KeyUp(object sender, KeyEventArgs e)
        {
            if ((e.Key == Key.Escape) && (backgroundWorker.IsBusy == true))
                backgroundWorker.CancelAsync();
        }
    }
}

   
    
    
    
  








Related examples in the same category

1.Updating the UI from a Background ThreadUpdating the UI from a Background Thread
2.Implementing Threading in Silverlight ApplicationsImplementing Threading in Silverlight Applications
3.Implementing the DoWork eventImplementing the DoWork event
4.Reporting progress changes from the BackgroundWorkerReporting progress changes from the BackgroundWorker
5.Event Dispatcher TimerEvent Dispatcher Timer
6.No Background WorkerNo Background Worker
7.Canceling a BackgroundWorker when a user selects the Escape keyCanceling a BackgroundWorker when a user selects the Escape key
8.Event Dispatcher with ThreadEvent Dispatcher with Thread