<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WPF" Height="120" Width="364"> <StackPanel> <Button Click="ButtonTrue_Click">UI Thread</Button> <Button Click="ButtonFalse_Click">Non-UI Thread</Button> <TextBlock x:Name="txtResult"/> </StackPanel> </Window> //File:Window.xaml.cs using System.Windows; using System.Windows.Threading; namespace WpfApplication1 { public partial class Window1 : Window { private delegate void CheckAccessDelegate(); private delegate void SetResultTextDelegate(string result); public Window1() { InitializeComponent(); } private void ButtonTrue_Click(object sender, RoutedEventArgs e) { CheckAccess(); } private void ButtonFalse_Click(object sender, RoutedEventArgs e) { CheckAccessDelegate del = new CheckAccessDelegate(CheckAccess); del.BeginInvoke(null, null); } private void CheckAccess() { if(txtResult.Dispatcher.CheckAccess()) { txtResult.Text = "True"; }else{ txtResult.Dispatcher.BeginInvoke(DispatcherPriority.Normal,new SetResultTextDelegate(SetResultText),"False"); } } private void SetResultText(string result) { txtResult.Text = result; } } }