Mega Code Archive

 
Categories / C# / WPF
 

Manage unhandled exceptions that are thrown on secondary worker threads

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