Create a Background Worker Thread in XAML : 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"
   xmlns:ComponentModel="clr-namespace:System.ComponentModel;assembly=System"
   Title="WPF" Height="100" Width="200">
    
    <Window.Resources>
        <ComponentModel:BackgroundWorker
            x:Key="backgroundWorker"
            WorkerReportsProgress="True"
            WorkerSupportsCancellation="True"
            DoWork="BackgroundWorker_DoWork"
            RunWorkerCompleted="BackgroundWorker_RunWorkerCompleted"
            ProgressChanged="BackgroundWorker_ProgressChanged"/>
    </Window.Resources>
    
    <StackPanel>
        <ProgressBar Name="progressBar"/>
        <Button Name="button" Click="button_Click" HorizontalAlignment="Center">Start</Button>
    </StackPanel>
</Window>
//File:Window.xaml.cs

using System;
using System.ComponentModel;
using System.Threading;
using System.Windows;
using System.Windows.Input;

namespace WpfApplication1
{
    public partial class Window1 : Window
    {
        private readonly BackgroundWorker worker;

        public Window1()
        {
            InitializeComponent();
            worker = this.FindResource("backgroundWorker") as BackgroundWorker;
        }

        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 BackgroundWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            for(int i = 1; i <= 100; i++)
            {
                if(worker.CancellationPending)
                    break;

                Thread.Sleep(100);
                worker.ReportProgress(i);
            }
        }

        private void BackgroundWorker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
        {
            this.Cursor = Cursors.Arrow;
            Console.WriteLine(e.Error.Message);
            button.Content = "Start";
        }

        private void BackgroundWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
        {
            progressBar.Value = e.ProgressPercentage;
        }
    }
}
WPF Create A Background Worker Thread In X A M L








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