全球意义“在一个地方”,例如不是多次尝试...捕获,例如在每个事件处理程序上经证实的“已知工作” - 我知道涵盖.NET和其他异常并不简单。
感谢。
解决方案根据以下答案进行编码。
注意:这被认为涵盖了其他线程的异常。
static class Program
{
static void MyHandler(Exception e)
{ MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
static void MyThreadExceptionEventHandler(object sender, ThreadExceptionEventArgs args)
{ MyHandler(args.Exception);
// App continues.
}
static void MyAppExceptionHandler(object sender, UnhandledExceptionEventArgs args)
{ MyHandler((Exception)args.ExceptionObject);
// There follows a OS "needs to close" dialog, terminating app.
}
static void Main()
{
// For UI thread exceptions
Application.ThreadException +=
new ThreadExceptionEventHandler(MyThreadExceptionEventHandler);
// Force all Windows Forms errors to go through our handler.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
// For non-UI thread exceptions
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(MyAppExceptionHandler);
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
答案 0 :(得分:3)
默认行为,当它在未处理的异常上显示错误对话框并终止是一个很好的公式。如果您不喜欢此对话框的外观,则可以显示own instead,但principle是相同的(例如here):
public static void Main(string[] args)
{
// Add the event handler for handling UI thread exceptions to the event.
Application.ThreadException
+= new ThreadExceptionEventHandler(/* YOUR OWN HANDLER */);
// Set the unhandled exception mode to force all
// Windows Forms errors to go through our handler.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
// Add the event handler for handling non-UI thread exceptions to the event.
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(/* YOUR OWN HANDLER */);
// Runs the application.
Application.Run(new /* YOUR MAIN FORM*/);
}
通常,异常处理没有神奇的“解决方案” - 在调用任何方法之前,您必须think了handling个特定异常。在这方面,Windows Forms没有什么特别之处。
答案 1 :(得分:2)
处理AppDomain.CurrentDomain.UnhandledException和Application.ThreadException你应该很好!
答案 2 :(得分:0)
使用可在配置文件中调整的异常处理应用程序阻止和异常策略。我喜欢它,但在考虑非常小的项目时,某人可能“太沉重”。