最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2022年09月20日 09:00:18   作者:Csharp小記  
在運行、調(diào)試代碼的時候,會遇到一些異常情況,很多時候我們代碼寫得足夠健壯,所以出現(xiàn)的概率比較低,但如果一出現(xiàn),我們又沒處理好,就可能會導(dǎo)致程序的崩潰、退出。本文主要介紹了WinForm處理異常的方法,需要的可以參考下

場景

在運行、調(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;
            }
        }

到此這篇關(guān)于詳解C# WinForm如何優(yōu)雅的處理異常的文章就介紹到這了,更多相關(guān)C# WinForm處理異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#多線程編程詳解

    C#多線程編程詳解

    C#提供了豐富的多線程操作,為編程帶來了極大的便利,但如果使用不當也會帶來各種各樣的麻煩。本篇文章主要介紹了C#多線程,有需要的可以了解一下。
    2016-11-11
  • 詳解WCF服務(wù)中的svc文件

    詳解WCF服務(wù)中的svc文件

    本文詳細講解了WCF服務(wù)中的svc文件,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C#中的引用類型以及特殊引用類型詳解

    C#中的引用類型以及特殊引用類型詳解

    本文詳細講解了C#中的引用類型以及特殊引用類型,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • SMTP客戶端未通過身份驗證等多種錯誤解決方案分享

    SMTP客戶端未通過身份驗證等多種錯誤解決方案分享

    這篇文章主要介紹了SMTP服務(wù)器要求安全連接或客戶端未通過身份驗證的多種解決方案,感興趣的小伙伴們可以參考一下
    2016-05-05
  • ASP.Net動態(tài)讀取Excel文件最簡方法

    ASP.Net動態(tài)讀取Excel文件最簡方法

    本篇文章給大家分享了ASP.Net動態(tài)讀取Excel文件最簡方法,對此有需要的讀者們參考學習下。
    2018-05-05
  • C#獲取Windows10屏幕縮放比例的操作方法

    C#獲取Windows10屏幕縮放比例的操作方法

    這篇文章主要介紹了C#獲取Windows10屏幕的縮放比例,接下來介紹如何獲取Display?resolution中顯示的實際分辨率,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2021-12-12
  • C#如何利用反射將枚舉綁定到下拉框詳解

    C#如何利用反射將枚舉綁定到下拉框詳解

    這篇文章主要給大家介紹了關(guān)于C#如何利用反射將枚舉綁定到下拉框的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起看看吧
    2018-07-07
  • C#使用隨機數(shù)編寫班級點名器的示例代碼

    C#使用隨機數(shù)編寫班級點名器的示例代碼

    本文主要介紹了C#使用隨機數(shù)編寫班級點名器的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • C#通過配置文件動態(tài)修改web.config內(nèi)容的操作步驟

    C#通過配置文件動態(tài)修改web.config內(nèi)容的操作步驟

    這篇文章主要介紹了C#通過配置文件動態(tài)修改web.config內(nèi)容的操作步驟,文中通過圖文結(jié)合的方式介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • MVC設(shè)定默認路由為指定的Area下的某個action

    MVC設(shè)定默認路由為指定的Area下的某個action

    今天小編就為大家分享一篇關(guān)于MVC設(shè)定默認路由為指定的Area下的某個action,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評論

咸宁市| 宜兴市| 鄢陵县| 霍邱县| 民勤县| 瑞昌市| 榕江县| 三江| 东海县| 六盘水市| 准格尔旗| 扶绥县| 乐都县| 灵寿县| 平泉县| 方山县| 大宁县| 偏关县| 阿鲁科尔沁旗| 宣武区| 达尔| 出国| 清水河县| 柘荣县| 沁阳市| 靖安县| 婺源县| 两当县| 贵州省| 新宁县| 信丰县| 平陆县| 澜沧| 冕宁县| 江西省| 美姑县| 三都| 田东县| 铜陵市| 新乐市| 睢宁县|