【问题标题】:How to prevent Main form from closing after handling exception error?处理异常错误后如何防止主窗体关闭?
【发布时间】: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 无法阻止应用程序终止。”

标签: c# winforms exception


【解决方案1】:

当代码到达全局处理程序时,它无处可去。从技术上讲,如果您没有在某处显式处理异常,那是因为您无法从中恢复,否则您应该在异常到达全局处理程序之前捕获它们。在适当的情况下,我会在主表单和子表单中使用 try / catch。在子表单中,您只需关闭 catch 块中的表单。在主窗体中,您决定何时可以恢复,否则抛出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多