我正在我的 .NET 应用程序中测试异常处理。使用下面的代码,我可以记录所有异常,但我不知道如何捕获它们,所以它们不会停止我的应用程序。 这是我正在使用的代码:
public class ExceptionHandler
{
public ExceptionHandler()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.FirstChanceException += MyHandler2;
}
private void MyHandler2(object sender, FirstChanceExceptionEventArgs e)
{
try
{
throw e.Exception;
//this ends up in eternal loop with 'stack overflow'
}
catch (Exception exception)
{
//exception never comes here, but if the exception is
//not caught inside catch block, then it's unhandled and it stops application
}
}
}
那么,我怎样才能在 MyHandler2 中捕获异常 e 呢?不能只用catch,必须try-catch ...
最佳答案
当然,这还没有涉及到 catch 子句。无意中,您创建了一个递归:
- 第一次机会异常发生在您的程序中的某处。
- 正在触发您的处理程序。
- 您的处理程序中存在第一次机会异常,糟糕!最好转到我的异常处理程序!
- 正在触发您的处理程序。
- 您的处理程序中存在第一次机会异常,糟糕!最好转到我的异常处理程序!
- 正在触发您的处理程序。
- 您的处理程序中存在第一次机会异常,糟糕!最好转到我的异常处理程序!
- 正在触发您的处理程序。
- 您的处理程序中存在第一次机会异常,糟糕!最好转到我的异常处理程序!
...
还有你的堆栈溢出...
正如@Marc Gravell 在他的回答中指出的那样,此事件不用于处理异常。异常应该在本地处理。
看看this SO thread了解更多详情。
关于c# - 在函数参数中捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20262079/