<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfApplication1.MainWindow"
Height="200" Width="400">
<Button Click="aClick">Thread</Button>
</Window>
//File:Window.xaml.cs
using System;
using System.Threading;
using System.Windows;
using System.Windows.Threading;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Title = string.Format("Running on Main UI Thread {0}", Thread.CurrentThread.ManagedThreadId);
}
void aClick(object sender, RoutedEventArgs e)
{
Thread thread = new Thread(aMethod);
thread.SetApartmentState(ApartmentState.STA);
thread.IsBackground = true;
thread.Start();
}
void aMethod(){
try{
string msg = string.Format("secondary on worker thread {0}.", Dispatcher.CurrentDispatcher.Thread.ManagedThreadId);
throw new Exception(msg);
}catch (Exception ex){
int secondaryWorkerThreadId = Thread.CurrentThread.ManagedThreadId;
Application.Current.Dispatcher.Invoke(
DispatcherPriority.Send,
(DispatcherOperationCallback)delegate(object arg)
{
string msg = string.Format("from secondary worker thread {0}.", secondaryWorkerThreadId);
throw new Exception(msg, ex);
}
, null);
}
}
}
}