程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#異常處理經驗(原則與方法),

C#異常處理經驗(原則與方法),

編輯:C#入門知識

C#異常處理經驗(原則與方法),


本文是異常處理經驗性的文章,其實跟C#關系也不大。比較適合剛剛熟悉異常語法,而缺乏實戰的讀者。當然,經驗老練的讀者也可指出不足、給予意見、補充說明,一起完善文章,分享更多知識與經驗。   1、什麼時候該異常處理? 1)代碼最外層,如WinFrom,避免用戶看到內部異常信息用戶體驗不好,或者造成程序崩潰,可以用log4net之類的框架記錄異常。 2)遇到異常需要恢復狀態或者重試的地方。例如連接數據庫偶然失敗了,可以有個重連機制,在Catch塊重新連接數據庫。 3)對於一系列有可能失敗的任務,其中有一個任務失敗,不想影響到其他任務。例如要上傳100張圖片,不想因為一張圖片上傳發生異常而失敗,進而終止整個上傳任務,僅需要記錄下失敗的圖片,提醒用戶重傳即可。   2、異常處理需要注意的地方 1)Catch和Finally代碼應該非常短,而且成功率極高,避免自己又拋出一個異常。否則CLR會終止進程,避免安全漏洞或者不可預知的後果。這個類似於Windows藍屏,發生了嚴重的錯誤,寧願使系統不可用。 2)Catch塊盡量避免直接捕捉異常的基類Exception,而應該捕捉具體的異常類。   3、異常處理的方法和技巧 1)是否能構建統一的框架處理異常,而不用手工來處理呢?      有的人可能會問,能不能偷懶,在一個地方處理異常就行了。如果僅僅是記錄異常系統信息,通知到用戶,而且這些信息通常是可以缺少一些上下文的,是可以構建同一的機制記錄異常信息的。 例如: WinFrom的Application對象本身就提供了ThreadException時間來捕捉為處理的異常 復制代碼
  static void Main()
        {
            //注冊捕捉異常事件
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            Exception ex = e.Exception;
            //做一些極其簡單的記錄異常信息操作
        }
復制代碼 又例如: WebFrom的Global.asax本身就已經定義了void Application_Error(object sender, EventArgs e) 來處理異常 復制代碼
     void Application_Error(object sender, EventArgs e)
        {
            // 在出現未處理的錯誤時運行的代碼
            Exception ex = Server.GetLastError();
            //處理完異常後清除異常
            Server.ClearError();
        }
復制代碼

 

     但是很多時候,異常處理,不僅僅只是記錄到了錯誤信息就可以了,有時候是需要失敗重試或者清理資源等等,因此,僅僅靠統一構建異常處理框架是不夠靈活的,

因此可以一方面統一處理,另外一方面特殊的地方可以另外處理。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved