Mega Code Archive
Unblock Thread with BackgroundWorker
//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..";
}
}
}