应用程序不会在未处理的异常时死亡
本文关键字:异常 未处理 应用程序 | 更新日期: 2023-09-27 18:34:25
如果我的应用程序最终出现我无法处理的异常,我希望它向用户显示错误消息并退出。问题是向用户显示一个异常对话框,其中包含选项"详细信息"、"继续"和"退出",如果用户单击"继续",应用程序将保持活动状态,而我不希望处于"某些"状态。
为了用最少的代码复制它,我刚刚创建了一个 Windows 窗体应用程序,添加了一个按钮,对于按钮单击代码,只需编写:
throw new ApplicationException("I must crash now!!!");
从调试文件夹、发布文件夹启动编译的 exe 或从复制到其他地方的发布文件夹启动 exe 时(以防 pdb 文件导致问题(并单击按钮,我会看到详细信息/继续/退出对话框,如果我说继续,应用程序将保持活动状态。如何防止显示继续选项?
我的计算机(Vista,Visual Studio 2008,Visual Studio 2010,使用VS2010创建测试应用程序(和用户计算机(Windows 7(都有这种行为。
是 Windows 窗体捕获异常并显示要避免的对话框。您可以将 Windows 窗体配置为不使用 Application.SetUnhandledExceptionMode 方法执行此操作。
您需要为 AppDomain.UnhandledException
事件编写一个事件处理程序,在其中向用户显示更好的错误消息。
http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx
但请记住,异常可能意味着系统处于未定义状态,因此即使错误对话框也可能无法显示...您需要能够优雅地崩溃。
在应用程序的起点:
static void Main() {
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += errorHandler;
// Then start your app!
}
static void errorHandler(object sender, UnhandledExceptionEventArgs args) {
// Show the user some error, but be prepared for disaster...
// Examine the args.ExceptionObject (which is an Exception)
}