狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

【C#】WinForm如何優雅的處理異常

admin
2023年8月1日 11:39 本文熱度 582

    場景:在運行、調試代碼的時候,往往會遇到一些異常情況,很多時候我們代碼寫得足夠健壯,所以出現的概率比較低,但是如果一旦出現,我們又沒處理好,就可能會導致程序的崩潰、退出;當然還有一部分在方法內被我們用try{} catch{}給處理掉了,但是不得不承認,還是會有極少的異常未被規避,或者說,相信不是所有的方法內都做了異常處理,所以如何處理這些異常就顯得尤為重要


需求:能否提供一個捕捉全局異常的方式,并且最好能知道異常出在哪個位置?這樣首先可以規避掉未處理的異常,增強程序的可用性,然后一旦出現問題又能夠精準定位、方便排查。

開發環境:.NET Framework版本:4.5

開發工具: Visual Studio 2013

實現代碼:

  /// <summary>        /// 應用程序的主入口點。        /// </summary>        [STAThread]        static void Main()        {            BindExceptionHandler();            Application.EnableVisualStyles();            Application.SetCompatibleTextRenderingDefault(false);            Application.Run(new Form1());        }
       /// <summary>        /// 綁定程序中的異常處理        /// </summary>        private static void BindExceptionHandler()        {            //設置應用程序處理異常方式:ThreadException處理            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);            //處理UI線程異常            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);            //處理未捕獲的異常            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);        }
       /// <summary>        /// 處理UI線程異常        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)        {            string str = GetExceptionMsg(e.Exception, e.ToString());            MessageBox.Show(str, "系統錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);        }
       /// <summary>        /// 處理未捕獲的異常        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)        {            string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString());            MessageBox.Show(str, "系統錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);        }
       /// <summary>h        /// 生成自定義異常消息        /// </summary>        /// <param name="ex">異常對象</param>        /// <param name="backStr">備用異常消息:當ex為null時有效</param>        /// <returns>異常字符串文本</returns>        private static string GetExceptionMsg(Exception ex, string backStr)        {            StringBuilder sb = new StringBuilder();            sb.AppendLine("****************************異常文本****************************");            sb.AppendLine("【出現時間】:" + DateTime.Now);            if (ex != null)            {                sb.AppendLine("【異常類型】:" + ex.GetType().Name);                sb.AppendLine("【異常信息】:" + ex.Message);                sb.AppendLine("【堆棧調用】:" + ex.StackTrace);
               sb.AppendLine("【異常方法】:" + ex.TargetSite);
           }            else            {                sb.AppendLine("【未處理異?!浚?quot; + backStr);            }            sb.AppendLine("***************************************************************");            return sb.ToString();        }
 private void button1_Click(object sender, EventArgs e)        {            int x = int.Parse(textBox1.Text);        }

實現效果:

代碼解析:首先就是在Program文件中新建一個函數:BindExceptionHandler,在此方法綁定程序中的異常處理,即UI線程異常方法:Application_ThreadException和未捕獲的異常處理方法CurrentDomain_UnhandledException。最后再在Main函數中調用即可。然后Form中隨便寫個可造成異常的代碼,即效果如上圖。

另外在方法內部處理返回邏輯的時候,也可以考慮使用異常,既保證了函數的健壯性,又可以統一處理錯誤,即將所有的非正確的值以異常的方式拋出來,而不是return;代碼如下:

private string GetMsg(int code)

{

    try

    {

        if (code == 10)

        {

            return "Success";

        }

        else

        {

            throw new Exception("Error Code");

        }

    }

    catch (Exception ex)

    {

        return "Error:" + ex.Message;

    }

}


該文章在 2023/8/1 11:39:28 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved