Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Еще unhandled exceptions

17K
28 января 2008 года
Mexes
10 / / 19.08.2006
Преамбула.
Когда приложение Windows-Application было однопоточным (хотя в .NET это заведомо не так, назовем его условно таким, думаю, понимаете, о чем я), обработка неперехваченных исключений была легка и приятна: Application.ThreadException, происходила сборка данных и формировался отчет, юзер жал кнопку "Продолжить" и всё было замечательно.

Но по разным причинам в приложении появилась многопоточность. И теперь необработанное исключение из потока не перехватывается Application.ThreadException. Программа падает, и даже AppDomain.UnhandledException не в силах помочь — сохранить данные мы можем, но о кнопочке "Продолжить" можно забыть.

Теперь амбула.

Я накидал тестовое приложение из одной формы с тремя кнопками и следующими обработчиками.
Код:
private void button1_Click(object sender, EventArgs e)
{
    ThrowException();
}

private void button2_Click(object sender, EventArgs e)
{
    Thread t = new Thread(ThrowException);
    t.Start();
}

private void button3_Click(object sender, EventArgs e)
{
    (new VoidHandler(ThrowException)).BeginInvoke(null, null);
}

private void ThrowException()
{
    throw new Exception("Test");
}


  1. Кнопка 1 работает в "старом стиле": исключение перехватывается Application.ThreadException, формируется отчет о нем, работа продолжается
  2. При нажатии на кнопку 2 идет перехват AppDomain.UnhandledException, и приложение затем гарантированно выгружается.
    Вопрос 1. Как перехватить исключение в этом случае без завершения работы приложения?
  3. При нажатии на кнопку 3 исключение никем не перехватывается, работа идет дальше, будто бы его и не было.
    Вопрос 2. Почему необработанное исключение прошло мимо всех в приложении и работа продолжилась как ни в чем не бывало?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог