У меня есть приложение wpf C#.Глобальная обработка ошибок в Task.Run
Я обычно использую глобальный обработчик ошибок, чтобы поймать все ошибки:
private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
try
{
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => Xceed.Wpf.Toolkit.MessageBox.Show(e.Exception.ToString(), "Error",
MessageBoxButton.OK, MessageBoxImage.Error)));
e.Handled = true;
InformedWorkerDataService.Common.Shared.RecordMessage(e.Exception.ToString(), true);
}
finally { }
}
Однако, если начать с task.run «бит кода» и выдает ошибку, то я заметил, что ошибка не пойманы:
Task.Run(() =>
{
throw and error here
});
так что я должен поставить 'Try-поймать' вещь, чтобы захватить его:
Task.Run(() =>
{
try
{
throw an error here
}
catch (Exception ex)
{
do something with error
}
});
~ который Defe ats объект с глобальным обработчиком ошибок
Что делать?
попробовать [ 'TaskScheduler.UnobservedTaskException'] (https://msdn.microsoft.com/ en-us/library/system.threading.tasks.taskscheduler.unobservedtaskexception (v = vs.110) .aspx) event – dkozl
@dkozl cool - thanks :) –