C# 用户代码未处理PrioreException

C# 用户代码未处理PrioreException,c#,C#,我有多个带有try/catch块的嵌套方法。如果有任何异常,我希望记录第一个异常,并通过嵌套方法使控制流冒泡。我试图通过引发一个名为PrioreException的自定义异常来实现这一点 public class PriorException : ApplicationException { public PriorException() : base() { } public PriorException(string message) : base(message) { }

我有多个带有try/catch块的嵌套方法。如果有任何异常,我希望记录第一个异常,并通过嵌套方法使控制流冒泡。我试图通过引发一个名为PrioreException的自定义异常来实现这一点

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忽略PrioreException,最外层的catch块不会重新刷新。)


然而,发生的情况是,当遇到异常时,它会被捕获、记录并抛出一个PriorException。然后,控制权落入调用方法,在该方法中捕获并重试PrioreException。但随后控件移动到catch块的else子句的大括号中,程序崩溃,出现“PriorException未经用户代码处理”

我仍然在一个或多个嵌套的try/catch块中,这些块应该能够捕获此异常,而且我已经连接了AppDomain.CurrentDomain.UnhandledException以进行良好的度量。发生了什么事?

既然你在做

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

catch (PriorException ex)
{

}
现在,您只能捕获一般异常

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

异常捕获先前的异常

一旦异常得到处理,就需要重新显示它

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

catch {MyLog.ExceptionError(ex);}

然后继续你的程序

听起来你正在调试。运行时行为是否符合您的预期


另一方面:我强烈建议尝试重新构造代码,这样就不会有嵌套的try/catch块用于程序流。随着应用程序的进展,维护可能会变得非常棘手。

这也将捕获“PrioreException”,因为它是Exception的子类(通过ApplicationException)“但随后控制移动到catch块的else子句的大括号中”。在第一个调用方法的try/catch中,还是在第二个调用方法的try/catch中,会出现这种移动到大括号的情况?这个应用程序是多线程的吗?MyLog.ExceptionError是否以任何方式修改了ex?好的,我继续一点一点地修改它,试图解决这个问题。我得出的结论是,实际上所有的操作都有一个例外(没有双关语):在链中的某个点,控制流正在通过第三方组件(一个带皮肤的表单),并且由于某种原因,调试器无法通过这一点看到try/catch块。。。因此,当引发异常(任何异常)时,该异常应通过此组件到达try/catch块,调试器将其报告为未处理!谢谢你的帮助,我想我需要和卖主谈谈。