WPF C#

  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">
      BorderThickness="1" Margin="4">
    
      
      Go to sleep
      
      Try Me
      
      
      
      

      
        
        
      
    
  

//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..";
    }
  }
}