2013-03-07 29 views
4

我剛剛遇到了.Net中異常處理的奇怪行爲。 (我在MS Visual Studio 2008中使用C#,但是我在這裏看到的一個問題似乎暗示着我在整個.Net世界看到的都是真實的。)我寫了一個普通的WinForm應用程序。我故意導致未處理的異常在任何try塊之外的form_load事件處理程序中拋出。我沒有收到通知。如果在普通方法中發生未處理的異常,則會彈出一條消息,告訴我發生了異常,並向我提供有關該問題的一些信息。但是在處理程序中,代碼只是悄悄地退出函數,而不讓任何人知道它發生了。如果我添加一個try/catch塊,這個異常會按預期捕獲。在表單加載事件中未處理的異常

這種行爲是否真的發生在所有事件處理程序中?這是預期的行爲?如果是這樣,是因爲如果事件處理程序意外停止,那麼壞事發生的危險太大了?

+0

你可能創建了一個UnhandledThreadExceptionEventHandler嗎? – 2013-03-07 21:19:45

+0

從我讀的,它被看作是這個[問題]相同的問題http://stackoverflow.com/questions/10647551/exceptions-not-being-raised-in-c-just-kicks-out-of-該例程是這個錯誤/ 10652522#10652522 – Stephan 2013-03-07 21:26:39

+0

謝謝你的回覆。您引用的問題似乎涉及在Visual Studio中進行調試時的行爲。我觀察到VS內外的這種行爲。但我承認,這兩次都是調試版本。我沒有在發佈版本中嘗試我的測試。 – 2013-03-08 15:29:10

回答

1

無論是在VS內還是在VS之外,當有一個調試器連接到進程時,會發生此行爲。但是,作爲調試版本沒有區別。如果在沒有的情況下運行VS 以外的調試器,則未處理的異常將啓動。 您可以檢查

Why the form load can't catch exception?VS2010 does not show unhandled exception message in a WinForms Application on a 64-bit version of Windows,可能的解決方案。

編輯:此行爲只針對form_load事件處理程序,據我所知。