我們所有人都使用try catch塊。但是在自定義函數中處理錯誤的最佳方式是什麼?在自定義函數內處理異常
當引發異常時(如果可能的話在函數中)顯示一個消息框給用戶,或者返回一個值表示在函數中發現了一個錯誤?
我們所有人都使用try catch塊。但是在自定義函數中處理錯誤的最佳方式是什麼?在自定義函數內處理異常
當引發異常時(如果可能的話在函數中)顯示一個消息框給用戶,或者返回一個值表示在函數中發現了一個錯誤?
它確實取決於函數,但總的來說,我會建議不要讓它顯示一個MessageBox給用戶;這是用戶界面的一項任務。如果函數(出於任何正當理由)確實顯示一個MessageBox,則提供一個保證爲「無聲」的重載,以便該函數的調用者可以阻止該MessageBox。但是,正如我所說的,我認爲最好讓調用者決定如何處理異常。畢竟,這可能是從沒有UI的Windows服務調用函數。
我通常使用這些方法之一:
這適用於函數本身無法處理異常的情況。在某些情況下,函數可能會處理異常狀態並繼續執行其工作。在這些情況下,函數當然不會拋出異常。
我讓我所有的錯誤冒泡到頂層,我使用應用程序錯誤處理程序來處理它們。
如果我有一個特定的錯誤,我知道可以發生在一個函數中,並且該函數可以處理它,那麼我就可以。
超時,對象引用沒有設置等等到最高處理程序。
不要捕捉你無法做的事情。充斥着try/catch塊的代碼很難閱讀,這意味着您的異常處理代碼不包含在一個地方以方便維護。
如果你是剛剛登錄異常或提醒用戶,這應該在堆棧的頂部來完成(或者在您的應用層邊界)。使用Application.ThreadException事件和AppDomain.CurrentDomain.UnhandledException事件並將它們掛接到Sub Main方法中的事件處理程序。
如果您想讓它冒泡,請使用Andy建議的應用程序級異常處理程序。這樣,您可以記錄異常情況,如果需要顯示消息框以及可能需要執行的任何其他操作。 – 2009-06-04 19:26:50
@Sam:非常好的建議 – 2009-06-04 19:28:17