抛出的异常不会停止应用程序

时间:2009-09-10 15:08:44

标签: c# .net exception

有些例外情况如下:

throw new Exception( errMsg );

... doest正在停止我的申请!

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

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

EDIT_2:

如上所述 - 主要发生在绑定时。

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

任何想法如何强制停止绑定并引发真正的异常?

示例代码,用于说明我在说什么

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

3 个答案:

答案 0 :(得分:6)

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

他们称之为“快速失败”。这个想法是,如果抛出了你没想到的异常(并因此捕获),你的应用程序就处于不稳定状态。在这一点上,崩溃比继续跛行更好。

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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