【问题标题】:PriorException was unhandled by user code用户代码未处理 PriorException
【发布时间】:2010-06-23 05:46:39
【问题描述】:

我有多个带有 try/catch 块的嵌套方法。如果有任何异常,我想记录第一个异常,并通过嵌套方法让控制流向上冒泡。我试图通过引发一个名为 PriorException 的自定义异常来做到这一点......

public class PriorException : ApplicationException
{
    public PriorException() : base() { }
    public PriorException(string message) : base(message) { }
}

... 并像这样编写 catch 块:

try
{
    (do stuff here)
}
catch (Exception ex)
{
    MyLog.ExceptionError(ex);
    if (ex is PriorException) { throw; } else { throw new PriorException(); }
}

(MyLog 忽略 PriorException,最外面的 catch 块不会重新抛出。)

但是,发生的情况是,当遇到异常时,它会被捕获、记录并引发 PriorException。然后控制权落到捕获并重新抛出 PriorException 的调用方法上。但随后控制转移到 catch 块的 else 子句的左大括号,程序崩溃并显示“PriorException 未被用户代码处理”。

我仍在一个或多个嵌套的 try/catch 块中,这些块应该捕获此异常,此外,我还连接了 AppDomain.CurrentDomain.UnhandledException 以备不时之需。那到底是怎么回事?

【问题讨论】:

  • "但随后控制移动到 catch 块的 else 子句的左大括号"。这种打开大括号的移动发生在第一个调用方法或第二个调用方法的 try/catch 中吗?这个应用程序是多线程的吗? MyLog.ExceptionError 是否以任何方式修改 ex?
  • 好的,我继续一点一点地改变这个,试图解决这个问题。我得出的结论是,除了一个例外(没有双关语),一切实际上都有效:在链中的某一点,控制流正在通过第 3 方组件(皮肤形式),并且由于某种原因调试器可以'无法通过此查看 try/catch 块...因此,当引发应该通过此组件到达 try/catch 块的异常(任何异常)时,调试器会将其报告为未处理!感谢您的帮助,我想我需要与供应商协商。

标签: c#


【解决方案1】:

听起来您正在调试。运行时行为是您所期望的吗?

附带说明:我强烈建议您尝试重构您的代码,这样您就没有用于程序流的嵌套 try/catch 块。随着您的应用程序的进行,维护可能会变得非常棘手。

【讨论】:

    【解决方案2】:

    既然你在做

    try
    {
        (do stuff here)
    }
    catch (Exception ex)
    {
        MyLog.ExceptionError(ex);
        if (ex is PriorException) { throw; } else { throw new PriorException(); }
    }
    

    你需要添加

    catch (PriorException ex)
    {
    
    }
    

    现在你唯一能捕捉到的一般例外。

    编辑刚刚意识到这是不正确的

    Exception 确实捕获了 Prior 异常。

    异常处理后需要重新抛出异常。

    你说一旦异常被处理并转换为ProperException的类型,异常就永远不会被触及。为什么不直接说

    catch {MyLog.ExceptionError(ex);}
    

    然后继续你的程序

    【讨论】:

    • 这也会捕获“PriorException”,因为它是 Exception 的子类(通过 ApplicationException)
    猜你喜欢
    • 2013-12-28
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多