gpt4 book ai didi

c# - 处理未处理的异常问题

转载 作者:IT王子 更新时间:2023-10-29 04:02:11 26 4
gpt4 key购买 nike

我想为我可能没有在我的代码中捕获的所有意外异常设置一些处理程序。在 Program.Main() 中,我使用了以下代码:

AppDomain.CurrentDomain.UnhandledException
+= new UnhandledExceptionEventHandler(ErrorHandler.HandleException);

但它并没有像我预期的那样工作。当我在 Debug模式下启动应用程序并引发异常时,它确实调用了处理程序,但之后 Visual Studio 中的异常助手弹出,就好像异常发生时没有任何处理。我在处理程序中尝试了 Application.Exit(),但效果不佳。

我想要实现的是用我的处理程序处理异常,然后应用程序正常关闭。有没有其他方法可以做到这一点,或者我是否以错误的方式使用了上面的代码?

最佳答案

通常我使用类似这样的东西来 try catch 所有意外的顶级异常。

using System;

static class Program
{
[STAThread]
static void Main(string[] argv)
{
try
{
AppDomain.CurrentDomain.UnhandledException += (sender,e)
=> FatalExceptionObject(e.ExceptionObject);

Application.ThreadException += (sender,e)
=> FatalExceptionHandler.Handle(e.Exception);

// whatever you need/want here

Application.Run(new MainWindow());
}
catch (Exception huh)
{
FatalExceptionHandler.Handle(huh);
}
}

static void FatalExceptionObject(object exceptionObject) {
var huh = exceptionObject as Exception;
if (huh == null) {
huh = new NotSupportedException(
"Unhandled exception doesn't derive from System.Exception: "
+ exceptionObject.ToString()
);
}
FatalExceptionHandler.Handle(huh);
}
}

也许这对您也有帮助?这段主要代码通过一个方法调用路由了所有三种捕获意外顶级异常的方法。您现在只需要一个静态类 FatalExceptionHandler,它在其 Handle 方法中包含您的顶级异常处理。

实际上,任何应用程序开发人员都知道实际上只有两件事要做:

  1. 按照您认为合适的方式显示/记录异常
  2. 确保退出/终止应用程序进程

如果您认为第二项很奇怪,请记住,我们一开始只是在非常特殊的情况下才会费心这样做。这些事情可能是错误,需要更改您的应用程序才能准确解决。任何其他异常处理 - 函数式 - 应该在您的实际程序代码中降低,在有意义的地方捕获特定类型的异常并以有意义的方式在那里处理它们。其他任何东西都应该冒泡到你的 FatalExceptionHandler 以让自己知道并阻止可能有缺陷的程序从损坏的状态运行

死程序不会说谎......;-)

关于c# - 处理未处理的异常问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/406385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com