Этот вопрос немного связан с этим вопросом об обработке исключений . Обходной путь, который я нашел, состоит в том, чтобы развернуть мой собственный цикл сообщений.
Итак, мой метод Main теперь выглядит примерно так:
[STAThread]
static void Main() {
// this is needed so there'll actually an exception be thrown by
// Application.Run/Application.DoEvents, instead of the ThreadException
// event being raised.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form form = new MainForm();
form.Show();
// the loop is here to keep app running if non-fatal exception is caught.
do {
try {
Application.DoEvents();
Thread.Sleep(100);
}
catch (Exception ex) {
ExceptionHandler.ConsumeException(ex);
}
}
while (!form.IsDisposed);
}
Что мне интересно, тем не менее, это безопасный / достойный способ заменить более типичный
'Application.Run (new MainForm ());' , независимо от того, используется ли он для обработки исключений или для чего-либо еще, или я всегда должен придерживаться Application.Run?
В другом приложении, которое сейчас тестируется, аналогичный подход используется и для загрузки (заставка), и для обработки исключений, и я не думаю, что это вызвало какие-либо проблемы (пока: -))