我有一个用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()
退出应用程序。
有可能吗?怎么样?
注意:
我已经看过这些问题,但它们都已经终止了。异常会一次又一次地被提出。
答案 0 :(得分:3)
这是一个非常糟糕的想法,如果故意让它变得非常困难或无法完成,我不会感到惊讶。
如果调用Unhandled异常处理程序,则根据定义,您的程序处于未知且最可能已损坏的状态。唯一合理的做法是在记录错误并且可能尝试保存任何关键数据后,尽快终止程序。即便这样也存在风险,因为错误可能发生在记录器中......或者在正常关机期间保存数据。
你想要除以0除外吗?你打算检查发生异常的 where ,以便你只捕获自己的错误。或者,当你别人的代码抛出除以0的异常时,你是否可以盲目地忽略它?
即使你可以这样做,当发生异常时你打算做什么?这不像你可以跳回原来的地方继续。堆栈已经解开并且所有上下文都丢失了。
你不想这样做。真。编写代码,使其不会除以0.或者使用try / catch。这就是它的用途。
答案 1 :(得分:1)
我认为你可以使用try catch
块来解决它: -
try {
int zero = 0;
int i = 10 / zero;
}
catch (DivideByZeroException)
{
}
答案 2 :(得分:0)
试试这个(也为'Application.ThreadException'添加一个处理程序):
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException +=
CurrentDomain_UnhandledException;
Application.ThreadException +=
new System.Threading.ThreadExceptionEventHandler(
Application_ThreadException);
Application.SetUnhandledExceptionMode(
UnhandledExceptionMode.CatchException);
int zero = 0;
int i = 10 / zero;
}