2009-09-10 22 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團隊不得不告訴你的。