У меня есть приложение WPF, где я выполняю длительный вызов WCF с использованием System.Threading.Tasks.Я перехватываю необработанные исключения, добавляя обработчик в Application.Current.DispatcherUnhandledException.
Я создаю задачу, в которой функция ContinueWith запускается в потоке пользовательского интерфейса, используя следующий код:
var task = new Task<T>(func).ContinueWith(t =>
{
if (t.IsFaulted)
{
throw t.Exception.GetBaseException();
}
else
{
// Show t.Result on UI
}
}, TaskScheduler.FromCurrentSynchronizationContext());
Когдав задаче возникает исключение, я хотел бы перебросить исключение, чтобы обработчик DispatcherUnhandledException мог обработать его.Но когда я перебрасываю исключение, как показано выше, это приводит к сбою моего приложения, и DispatcherUnhandledException не вызывается.
Как перебросить исключение в потоке пользовательского интерфейса, чтобы вызывался обработчик DispatcherUnhandledException?
Когда я использовал BackgroundWorker, перебрасывание исключения сделало именно это.По сути, я хочу заменить BackgroundWorker на Task, поскольку у Task есть несколько действительно приятных функций, которыми я бы хотел воспользоваться.