gpt4 book ai didi

c# - 控制台应用程序中的非终止全局异常处理程序

转载 作者:行者123 更新时间:2023-11-30 20:59:32 25 4
gpt4 key购买 nike

我有一个用 C# 代码编写的控制台应用程序。假设它是最简单的应用程序,如 Hello World 示例:

class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException +=
CurrentDomain_UnhandledException;
int zero = 0;
int i = 10 / zero;
}

static void CurrentDomain_UnhandledException(
object sender, UnhandledExceptionEventArgs e)
{
Console.WriteLine("exception");
}
}

但是,我想在全局异常处理程序中处理 DevideByZero 异常,但不通过 Environment.Exit() 退出应用程序。

有可能吗?怎么办?

注意:

我已经看过这些问题,但它们都已终止。一次又一次地引发异常。

.NET Global exception handler in console application

Global exception handling in c# (console application)

最佳答案

这是一个非常糟糕的想法,如果故意让它变得非常困难或不可能实现,我也不会感到惊讶。

如果调用了未处理的异常处理程序,则根据定义,您的程序处于未知且很可能已损坏的状态。唯一合理的做法是在记录错误并可能尝试保存任何关键数据后尽快终止程序。即使这样也是有风险的,因为错误可能发生在记录器中……或者在正常关闭期间保存数据。

您想捕获除以 0 的异常吗?您是否要检查异常发生的位置,以便您只捕获自己的错误。或者当其他人的代码抛出除以 0 异常时盲目忽略是否可以?

即使您可以做到这一点,当异常发生时您打算做什么?这不像你可以跳回到你原来的地方继续。堆栈已展开,所有上下文都已丢失。

你不想这样做。真的。编写您的代码,使其不会被 0 除。或使用 try/catch。这就是它的用途。

关于c# - 控制台应用程序中的非终止全局异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15460616/

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