我有一个问题,我似乎无法解决一个项目。请考虑以下代码:
namespace TestApp
{
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionsHandler);
int[] a = { 0, 1, 2 };
int y = a[6];
}
public static void UnhandledExceptionsHandler(object sender, UnhandledExceptionEventArgs e)
{
try
{
File.AppendAllText("Exceptions.log", (e.ExceptionObject as Exception).Message);
}
catch (Exception ex)
{
Environment.Exit(1);
}
}
}
}
未处理的异常处理程序实际上根据需要获取未处理的异常并将消息写入日志文件。但是在退出处理程序时,代码将继续使用索引超出范围行:int y = a [6]。我需要代码移动到下一行代码,或者通常继续处理未处理的异常 - 在这种情况下终止应用程序。实际上,我陷入了无限循环抛出未处理异常/命中未处理异常事件处理程序。
答案 0 :(得分:3)
您希望处理程序中有try..finally
:
try {
File.AppendAllText("Exceptions.log", (e.ExceptionObject as Exception).Message);
}
finally {
Environment.Exit(1);
}
您现在拥有的只是捕获编写日志文件时发生的错误。如果没有错误(没有错误)..它将完成方法并冒泡回原始异常。