【发布时间】:2020-07-31 16:41:35
【问题描述】:
我有一个多表单应用程序。我的主窗体启动称为 startFrm。在其中我有一个菜单对象,它调用多个(子/子)表单。我希望添加一个全局级别的异常处理程序,如果任何子表单中有任何未处理的异常,我可以通过它捕获它 - 以适当的方式显示它;然后让用户继续使用主表单,也许做点别的。
在调用主窗体之前,我在 Program.cs 中使用了以下内容:
Application.ThreadException += new ThreadExceptionEventHandler(new ThreadExceptionHandler().ApplicationThreadException);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
这是 ApplicationThreadException 处理程序代码:
class ThreadExceptionHandler
{
internal void ApplicationThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
frmError frm = new frmError(e.Exception);
frm.ShowDialog();
return;
}
}
现在任何未处理的异常都会被我的错误处理程序捕获;但应用程序关闭。我该如何防止这种情况发生?我认为子表单可能有一些未处理的异常是相当常见的情况;但主窗体应继续允许访问其他功能。
任何指针都会有所帮助。
【问题讨论】:
-
解决方法是正确处理异常。未处理的异常处理程序仅用于在终止之前记录或保存数据。请参阅documentation,其中指出“UnhandledException 无法阻止应用程序终止。”