c# - 在函数参数中捕获异常

标签 c# .net exception

我正在我的 .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 子句。无意中,您创建了一个递归:

  1. 第一次机会异常发生在您的程序中的某处。
  2. 正在触发您的处理程序。
  3. 您的处理程序中存在第一次机会异常,糟糕!最好转到我的异常处理程序!
  4. 正在触发您的处理程序。
  5. 您的处理程序中存在第一次机会异常,糟糕!最好转到我的异常处理程序!
  6. 正在触发您的处理程序。
  7. 您的处理程序中存在第一次机会异常,糟糕!最好转到我的异常处理程序!
  8. 正在触发您的处理程序。
  9. 您的处理程序中存在第一次机会异常,糟糕!最好转到我的异常处理程序!
    ...

还有你的堆栈溢出...

正如@Marc Gravell 在他的回答中指出的那样,此事件不用于处理异常。异常应该在本地处理。
看看this SO thread了解更多详情。

关于c# - 在函数参数中捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20262079/

相关文章:

c# - 等待最后的方法调用

.net - 数据库中立的 .NET 应用程序

c# - 如何在 c#.net 中制作来电显示

.net - TryFoo是否应该抛出异常?

c# - .NET 中广泛使用 DAO 模式吗?

c# - 如何从 Entity Framework 中的多个数据库/表创建单个对象

c# - 应用调整

google-maps - flutter :谷歌地图状态错误(坏状态: future 已经完成)

c - 如何卸载不间断(浮点异常时继续)模式?

c# - 创建包含 ResourceDictionary 的 DLL