У меня есть тестовое приложение winforms с ThreadExceptionHandler, которое отображает окно сообщения при обнаружении необработанного исключения следующим образом:
[STAThread]
static void Main()
{
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
MessageBox.Show("error caught");
}
Когда я навязываю ошибку в ctor формы 1 (например, divbyzero) следующим образом:
public Form1()
{
InitializeComponent();
int i = 0;
int x = 5 / i;
}
и запустите приложение вне Visual Studio (в Windows 7), исключение деления на ноль: не обработано - я получаю бесполезное сообщение «WindowsFormApplication1 прекратил работать ...».
Однако , когда я перемещаю исключение divbybyzero в событие Form1_Load и перезапускаюсь, исключение обрабатывается правильно.
Может кто-нибудь объяснить, почему это так? Причина, по которой я запустил эту тестовую программу, заключается в том, что у меня возникла похожая проблема с необработанными исключениями в другом корпоративном приложении, которое я пытаюсь отследить.