BlockThread.xaml

image_pdfimage_print


   
  
<Window x:Class="WPFThreading.BlockThread"
  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"
  >
  <Window.Resources>
    <Style TargetType="{x:Type Button}">
      <Setter Property="Height" Value="20" />
      <Setter Property="Background" Value="Beige"/>
      <Setter Property="Margin" Value="2" />
    </Style>
    <Style TargetType="{x:Type Label}">
      <Setter Property="FontWeight" Value="Bold" />
      <Setter Property="Margin" Value="2" />
    </Style>
    <Style TargetType="{x:Type TextBox}">
      <Setter Property="Margin" Value="2" />
    </Style>
  </Window.Resources>
  <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;

namespace WPFThreading
{

  public partial class BlockThread : System.Windows.Window
  {

    public BlockThread()
    {
      InitializeComponent();

      this.UIThreadLabel.Content = this.Dispatcher.Thread.ManagedThreadId;
      this.BackgroundThreadLabel.Content = "N/A";
    }
    private void button1_click(object sender, RoutedEventArgs e)
    {
      System.Threading.Thread.Sleep(5000);
      this.textbox1.Text = "Done Sleeping...";
    }

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

  }
}