公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

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

【C#】WinForm如何優(yōu)雅的處理異常

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

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


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

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

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

實(shí)現(xiàn)代碼:

  /// <summary>        /// 應(yīng)用程序的主入口點(diǎn)。        /// </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)錯(cuò)誤", 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)錯(cuò)誤", MessageBoxButtons.OK, MessageBoxIcon.Error);        }
       /// <summary>h        /// 生成自定義異常消息        /// </summary>        /// <param name="ex">異常對(duì)象</param>        /// <param name="backStr">備用異常消息:當(dāng)ex為null時(shí)有效</param>        /// <returns>異常字符串文本</returns>        private static string GetExceptionMsg(Exception ex, string backStr)        {            StringBuilder sb = new StringBuilder();            sb.AppendLine("****************************異常文本****************************");            sb.AppendLine("【出現(xiàn)時(shí)間】:" + 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("【未處理異?!浚?quot; + backStr);            }            sb.AppendLine("***************************************************************");            return sb.ToString();        }
 private void button1_Click(object sender, EventArgs e)        {            int x = int.Parse(textBox1.Text);        }

實(shí)現(xiàn)效果:

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

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

主站蜘蛛池模板: 国产精品视频免费一区二区三区 | 国产午夜精品一区二区三区极品 | 国产午夜无码片在线观看 | 国产麻豆精品久久久久av | 国产成人年无码av片在线观看 | 国产精品日本欧美一区三 | 精品国产v无码大片在线观看 | 国产频99热精品在线 | 国产偷录视频叫床高潮 | 韩国女主播福利一区二区三区 | 成人亚洲欧美日韩精品 | 极品精品国产超清自在线观看 | 91国内在线观看视频 | av日韩天堂 | 国产精品成人小电影在线观 | 国产精品一区二区三乱码 | 高清在线精品一区二区三区 | 国产精品成人a区在线观看 国产精品成人h视频 | 成人免费a级毛片无码片在线播放 | 91久久国产成人免费观看资源 | 国产精品成人观看视频免费 | 极品国模无码 | 精品一卡三卡四卡免费网站 | 国产拍偷自偷在线精品 | 国产aⅴ精品一区二区三区色成熟 | 成人av在线一区二区三区四区 | 国产成人无码视频一区二区三 | 国产重口老太和小伙a片 | 福利视频在线一区 | 国产精品观看无码不卡视频 | 国产av无码专区亚洲av毛片 | 国产精品亚洲午夜一区二区三区 | 粉嫩av无码一区二区三区软件 | 国产精品白丝av在线观看播放 | 寡妇高潮一级毛片免费看懂色 | av网站免费在线观看精品 | 国产性爱网站亚洲全黄无码性色视在 | 成年永久一区三区免费视频 | 国产成人一区二区三区视频免费 | 国产成人年无码av片在线观看 | 精品一区二区三区免费视频 |