У меня есть простое приложение WinForms, работающее с BackgroundWorker
.BackroundWorker - Исключение - не закрывать приложение WinForms
Ниже Главная, где я прикрепляю обработчики исключений.
static class Program
{
private static Logger _logger = LogManager.GetCurrentClassLogger();
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.ThreadException += OnThreadException;
//Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
// AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new Form());
}
catch (Exception exc)
{
LogFatalException(exc);
}
}
private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
if (e.IsTerminating)
{
_logger.Info("Application is terminating due to an unhandled exception in a secondary thread.");
}
LogFatalException(e.ExceptionObject as Exception);
}
private static void OnThreadException(object sender, ThreadExceptionEventArgs e)
{
LogFatalException(e.Exception);
}
private static void LogFatalException(Exception exc)
{
_logger.Error(exc, exc.Message);
MessageBox.Show(exc.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Я звоню в свой рабочий стол, как показано ниже. Я хочу, чтобы какой-либо тип исключения происходил в фоновом потоке, чтобы перейти к основным методам обработки и log/alert, но НЕ закрыл приложение.
Что я делаю неправильно? Приложение все еще закрывается.
backgroundWorker1.RunWorkerCompleted += (senderWorker, eWorker) =>
{
if (eWorker != null)
{
throw new Exception("Error Processing. Please check connection and try again.");
}
};
backgroundWorker1.RunWorkerAsync();
Если вы не поймать, что исключение где-то структура будет прекратить применение. –
Питер, можете ли вы более конкретно на основе кода, который я изложил? Где я должен ловить исключение? – aherrick
Почему отмечена подписка UnhandledException? –