Я работаю над проектом, который реализован с использованием простой threads
. Большинство ожидаемых исключений в приложении обрабатываются, однако есть случаи, когда один из потоков генерирует неожиданное исключение, и приложение просто падает (приложение равно I/O
и Client-Server
, поэтому практически невозможно обрабатывать все исключения).Необработанные исключения, брошенные в потоки, не пойманы
Чтобы исправить это, я пытаюсь определить глобальный UnhandledExceptionHandler
, чтобы приложение отображало дружественное сообщение вместо сбоя. Это то, что я пробовал:
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
// The rest of the startup logic goes here
}
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Utilities.DisplayUnhandledException((Exception)e.ExceptionObject);
}
}
Это не работает. CurrentDomain_UnhandledException
никогда не вызывается. К сожалению, я не могу изменить структуру приложения, а это значит, что я не могу использовать параллельную библиотеку задач. Я не могу понять, почему это не работает. Есть ли другой способ обработки исключений, связанных с потоками? Любая помощь приветствуется.
попробовать 'Application.SetUnhandledExceptionMode (UnhandledExceptionMode.CatchException) и' Application.ThreadException + = Application_ThreadException; ' – Blorgbeard
Некоторые тщательные объяснения здесь: http://stackoverflow.com/questions/1472498/wpf-global-exception-handler –