Различная обработка исключений в XP и Vista - PullRequest
1 голос
/ 05 января 2010

У меня странная проблема. Скажем, у вас есть следующее:

Application.ThreadException += something;

try
{
  Application.Run(new Form1());
}
catch (Exception ex)
{

}

Теперь, когда где-то в приложении происходит исключение, Vista вызывает событие ThreadException, но XP просто прыгает прямо в блок catch.

Как заставить обработчик вести себя так же? В something мне нужно провести некоторую очистку, но она никогда не идет с XP. Следовательно, событие FormClosing никогда не запускается из блока catch, так как все формы располагаются на этом этапе.

Примечания:

  • Обе системы работают под управлением .NET 3.5 SP1, та же версия
  • Разница только в ОС

Спасибо

Ответы [ 2 ]

2 голосов
/ 05 января 2010

Вы можете подписаться на событие AppDomain.CurrentDomain.UnhandledException. Это всегда бросается, если приложение не обрабатывает свое исключение.

Между прочим, насколько я знаю, попытка использования оператора Application.Run () считается плохой практикой.

1 голос
/ 05 января 2010

Может быть, UnhandledExceptionMode имеет другое значение по умолчанию в Vista? Вы пытались поиграть с этим параметром? Вы можете явно включить режим, вызвав

// Set the unhandled exception mode to force all Windows Forms errors to go 
// through our handler.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...