【问题标题】:Thrown exception doesnt stop application抛出的异常不会停止应用程序
【发布时间】:2010-11-27 05:06:31
【问题描述】:

一些异常抛出如下:

throw new Exception( errMsg );

...确实不会停止我的应用程序!

我的期望是当我抛出任何前任时。 - 应用程序应立即停止。
但我注意到我的应用程序抛出了一个前任。一个接一个(尤其是绑定时)而不是同时终止

EDIT_1:
当它可以被拦截时,我没有 try-catch 块

EDIT_2:

如前所述 - 这主要发生在绑定时

例如,我有对象的 getter 检查用户的权限(GetValue 方法)- 如果没有引发异常。
我可以在调试器中看到它执行 throw new Exception(...) 语句,但应用程序不会停止。 我还注意到抛出异常的次数与绑定集合中的项目数一样多...

知道如何强制停止绑定并引发真正的异常吗?

示例代码来说明我在说什么

public  string  Name {
  get { return  GetValue( name, "Name"); }
}

【问题讨论】:

    标签: c# .net exception


    【解决方案1】:

    未捕获的异常将导致您的应用程序终止。它的设计(至少在 2.0 发布之后;1.1 有不同的行为,iirc)。

    他们称之为“快速失败”。这个想法是,如果抛出了您没有预料到的异常(因此捕获),您的应用程序将处于不稳定状态。此时,与其继续跛行,不如让它崩溃。

    绑定的行为不同,因为所有绑定操作(在 WPF 中)都旨在捕获所有异常,而不是关闭您的应用程序。他们做出这个决定的原因是 WPF 团队必须告诉你的。

    【讨论】:

      【解决方案2】:

      只有当它们一直未被捕获到当前堆栈的底部时,异常才会停止应用程序。 WPF 绑定对大多数抛出的异常非常有弹性;相反,它将在输出窗口中记录失败并继续。这是否是一个好的设计决策还有待商榷......

      【讨论】:

        【解决方案3】:

        如果我对您的理解正确:如果抛出的异常作为 try/catch 块的一部分被捕获,或者如果您在应用程序级别设置了异常捕获所有处理程序,您的应用程序将继续运行。

        【讨论】:

          猜你喜欢
          • 2011-05-28
          • 1970-01-01
          • 1970-01-01
          • 2014-02-17
          • 2012-03-19
          • 2011-10-16
          • 2012-02-08
          • 1970-01-01
          • 2018-09-19
          相关资源
          最近更新 更多