AppDomain.CurrentDomain.UnhandledExceptionin theory catches all exceptions on all threads of the appdomain. I found this to be very unreliable, though.-
Application.Current.DispatcherUnhandledExceptioncatches all exceptions on the UI thread. This seems to work reliably, and will replace theAppDomain.CurrentDomain.UnhandledExceptionhandler on the UI thread (takes priority). Usee.Handled = trueto keep the application running. -
For catching exceptions on other threads (in the best case, they are handled on their own thread), I found System.Threading.Tasks.Task (only .NET 4.0 and above) to be low-maintenance. Handle exceptions in tasks with the method
.ContinueWith(...,TaskContinuationOptions.OnlyOnFaulted). See my answer here for details.