2009-09-10 67 views
1

有些抛出这样的例外:抛出的异常犯规停止应用

throw new Exception(errMsg); 

...利己reallly停止我的应用程序!

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

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

EDIT_2它:

如所提到的 - 这主要发生在绑定时。

例如我有对象的getter检查用户的权限(GetValue方法) - 如果不引发异常。
我可以在调试器中看到它执行抛出新的异常(...)声明,但应用程序不会停止。 我也注意到异常会引发尽可能多的项目在绑定的集合...

任何想法如何强制停止绑定和上升真正的异常?

示例代码来说明我对你说

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

回答

1

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

2

异常只会停止应用程序,如果它们一直未捕获到当前堆栈的底部。 WPF绑定对大多数抛出的异常非常灵活;相反,它会在输出窗口中记录失败并继续。这是否是一个好的设计决策是一个需要辩论的问题...

6

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

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

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