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

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

WinForm如何優(yōu)雅的處理異常

admin
2023年8月25日 10:33 本文熱度 538

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


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

開發(fā)環(huán)境:.NET Framework版本:4.5

開發(fā)工具: Visual Studio 2013

實現(xiàn)代碼:

  /// <summary>        /// 應(yīng)用程序的主入口點。        /// </summary>        [STAThread]        static void Main()        {            BindExceptionHandler();            Application.EnableVisualStyles();            Application.SetCompatibleTextRenderingDefault(false);            Application.Run(new Form1());        }
       /// <summary>        /// 綁定程序中的異常處理        /// </summary>        private static void BindExceptionHandler()        {            //設(shè)置應(yīng)用程序處理異常方式: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, "系統(tǒng)錯誤", 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, "系統(tǒng)錯誤", 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("【出現(xiàn)時間】:" + DateTime.Now);            if (ex != null)            {                sb.AppendLine("【異常類型】:" + ex.GetType().Name);                sb.AppendLine("【異常信息】:" + ex.Message);                sb.AppendLine("【堆棧調(diào)用】:" + ex.StackTrace);
               sb.AppendLine("【異常方法】:" + ex.TargetSite);
           }            else            {                sb.AppendLine("【未處理異常】:" + backStr);            }            sb.AppendLine("***************************************************************");            return sb.ToString();        }
 private void button1_Click(object sender, EventArgs e)        {            int x = int.Parse(textBox1.Text);        }

實現(xiàn)效果:

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

另外在方法內(nèi)部處理返回邏輯的時候,也可以考慮使用異常,既保證了函數(shù)的健壯性,又可以統(tǒng)一處理錯誤,即將所有的非正確的值以異常的方式拋出來,而不是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/25 10:33:28 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved