Ensure That You Are Running on the UI Thread


   
  

<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="100" Width="300">
    <StackPanel>
        <Button Click="ButtonTrue_Click">UI Thread</Button>
        <Button Click="ButtonFalse_Click">Non-UI Thread</Button>
    </StackPanel>
</Window>
//File:Window.xaml.cs
using System.Windows;

namespace WpfApplication1
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void ButtonTrue_Click(object sender, RoutedEventArgs e)
        {
            this.Dispatcher.VerifyAccess();
        }

        private void ButtonFalse_Click(object sender, RoutedEventArgs e)
        {
            VerifyAccessDelegate del = new VerifyAccessDelegate(VerifyAccess);
            del.BeginInvoke(null, null);
        }

        private delegate void VerifyAccessDelegate();

        private void VerifyAccess()
        {
            this.Dispatcher.VerifyAccess();
        }
    }
}