【发布时间】: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#