<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;
}
}
}
|