Unblock Thread with BackgroundWorker : BackgroundWorker « Windows Presentation Foundation « C# / CSharp Tutorial






<Window x:Class="WPFThreading.UnblockThreadTwo"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="UI Thread Blocker" Height="275" Width="225">
  <Border Width="200" Height="225" BorderBrush="Black" 
    BorderThickness="1" Margin="4">
    <StackPanel>

      <Label>Simulate Long-Running Process</Label>
      <Button Name="button1" Click="button1_click">Go to sleep</Button>

      <Label>Will I respond?</Label>
      <Button Name="button2" Click="button2_click">Try Me</Button>

      <Label>Output Messages</Label>
      <TextBox Name="textbox1"/>

      <Label/>

      <StackPanel Orientation="Horizontal">
        <Label>UI thread:</Label>
        <Label Name="UIThreadLabel"></Label>
      </StackPanel>

      <StackPanel Orientation="Horizontal">
        <Label>BG thread:</Label>
        <Label Name="BackgroundThreadLabel"></Label>
      </StackPanel>

    </StackPanel>
  </Border>
</Window>
//File:Window.xaml.cs

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

namespace WPFThreading
{
  
  public partial class UnblockThreadTwo : System.Windows.Window
  {

    private BackgroundWorker worker;

    private delegate void SimpleDelegate();

    public UnblockThreadTwo()
    {
      InitializeComponent();

      this.UIThreadLabel.Content = this.Dispatcher.Thread.ManagedThreadId;
      this.BackgroundThreadLabel.Content = "N/A";
    }

    private void button1_click(object sender, RoutedEventArgs e)
    {
      worker = new BackgroundWorker();

      worker.DoWork += new DoWorkEventHandler(RunOnBGThread);

      worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(BGThreadWorkDone);

      worker.RunWorkerAsync();
    }

    private void button2_click(object sender, RoutedEventArgs e)
    {
      this.textbox1.Text = "Hello WPF";
    }

    private void LongRunningProcess()
    {

      SimpleDelegate del1 = delegate(){ this.BackgroundThreadLabel.Content = Thread.CurrentThread.ManagedThreadId; };
      this.Dispatcher.BeginInvoke(DispatcherPriority.Send, del1);

      Thread.Sleep(5000);
    }

    private void RunOnBGThread(object sender, DoWorkEventArgs e)
    {
      LongRunningProcess();
    }

    private void BGThreadWorkDone(object sender,RunWorkerCompletedEventArgs e)
    {
       this.textbox1.Text = "Done Sleeping..";
    }

  }
}
WPF Unblock Thread With Background Worker








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