【问题标题】:Catch exceptions in winforms without stopping application在不停止应用程序的情况下捕获 Winforms 中的异常
【发布时间】:2017-02-13 14:56:05
【问题描述】:

我有一个 winforms 应用程序,Program.cs 看起来像这样:

static void Main()
{
    try
    {
        // Set up application
        Application.Run();
    }
    catch (Exception ex)
    {   
        // construct log from ex
        log.Save(); // saves to db
    }
}

这工作正常,并且正在根据需要将日志保存到数据库中。但是,应用程序随后会关闭。

有没有办法可以捕获异常并记录它们,然后继续运行应用程序?上面的代码只是一个示例——实际上,如果抛出异常,就会完成一些工作。

【问题讨论】:

  • 如果没有具体的代码问题向我们展示您在示例中遇到的情况,这太宽泛了,无法回答。答案显然是,“当然有办法!”但这已经差不多了。
  • 这不能正常工作。当您使用调试器运行时,您只会捕获任何东西。当您不应该这样做时,因为这使得调试异常变得非常困难。您需要删除此代码。当抛出异常的代码没有处理异常时,不要再假设您可以处理异常。例外是你的朋友,他们会告诉你你做错了什么。永远不要忽视好的建议。

标签: c# winforms exception-handling


【解决方案1】:

看看AppDomain.FirstChanceException 事件。

但是,您可能真的想重新审视您的架构;一般来说,您无法从任意的Exception 优雅地恢复。

【讨论】:

    【解决方案2】:

    您可以使用Application.ThreadException 事件。

    在调用 Application.Run 之前,将委托挂钩到事件。

    Application.ThreadException += (s, e) => 
    {
        // construct log
        log.Save();
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 2016-05-26
      相关资源
      最近更新 更多