Вы можете просто наблюдать необработанные исключения в домене приложения с событиями:
Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Но, вероятно, было бы лучше обернуть поток в try catch и вручную перенаправить исключение обратно в поток пользовательского интерфейса. Если у вас есть ссылка на Dispatcher, вы можете использовать ее для передачи исключения обратно в поток пользовательского интерфейса. Есть более простые способы, если вы используете TPL, но сделать это вручную вы должны:
_dispatcher = Dispatcher.CurrentDispatcher;
Перед запуском фонового потока сохраните ссылку на Dispatcher где-нибудь, к которому фоновый поток сможет получить доступ.
private void FailedWorking(Exception ex)
{
_dispatcher.BeginInvoke(DispatcherPriority.Normal, (NotifyWorkerFailed)_notifyFailedMethod, ex);
}
Затем, когда вы хотите вызвать исключение в потоке пользовательского интерфейса, используйте Dispatcher.BeginInvoke и либо передайте ему метод делегата, который будет обрабатывать исключение, либо вы можете просто создать действие, которое выбрасывает
Вы можете найти множество других примеров поиска Диспетчер