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

C# WinForm捕獲未處理的異常實例解析

 更新時間:2014年09月10日 11:37:10   投稿:shichen2014  
這篇文章主要介紹了C# WinForm捕獲未處理的異常,包括了常見的未捕獲的異常、UI線程異常、非UI線程異常等,非常實用,需要的朋友可以參考下

本文以一個完整的實例形式講述了C# WinForm捕獲未處理的異常的方法。分享給大家供大家參考之用。具體代碼如下:

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
namespace GobalException
{
  static class Program
  {
    /// <summary>
    /// 應(yīng)用程序的主入口點。
    /// </summary>
    [STAThread]
    static void Main()
    {
      try
      {
        //處理未捕獲的異常  
        Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
        //處理UI線程異常  
        Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
        //處理非UI線程異常  
        AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
      }
      catch (Exception ex)
      {
        string str = "";
        string strDateInfo = "出現(xiàn)應(yīng)用程序未處理的異常:" + DateTime.Now.ToString() + "\r\n";
        if (ex != null)
        {
          str = string.Format(strDateInfo + "異常類型:{0}\r\n異常消息:{1}\r\n異常信息:{2}\r\n",
             ex.GetType().Name, ex.Message, ex.StackTrace);
        }
        else
        {
          str = string.Format("應(yīng)用程序線程錯誤:{0}", ex);
        }

        writeLog(str);
//frmBug f = new frmBug(str);//友好提示界面
      //f.ShowDialog();
        MessageBox.Show("發(fā)生致命錯誤,請及時聯(lián)系作者!", "系統(tǒng)錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
      }
    }
    /// <summary>
    ///這就是我們要在發(fā)生未處理異常時處理的方法,我這是寫出錯詳細(xì)信息到文本,如出錯后彈出一個漂亮的出錯提示窗體,給大家做個參考
    ///做法很多,可以是把出錯詳細(xì)信息記錄到文本、數(shù)據(jù)庫,發(fā)送出錯郵件到作者信箱或出錯后重新初始化等等
    ///這就是仁者見仁智者見智,大家自己做了。
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
    {
      
      string str = "";
      string strDateInfo = "出現(xiàn)應(yīng)用程序未處理的異常:" + DateTime.Now.ToString() + "\r\n";
      Exception error = e.Exception as Exception;
      if (error != null)
      {
        str = string.Format(strDateInfo + "異常類型:{0}\r\n異常消息:{1}\r\n異常信息:{2}\r\n",
           error.GetType().Name, error.Message, error.StackTrace);
      }
      else
      {
        str = string.Format("應(yīng)用程序線程錯誤:{0}", e);
      }
      writeLog(str);  
//frmBug f = new frmBug(str);//友好提示界面
      //f.ShowDialog();
      MessageBox.Show("發(fā)生致命錯誤,請及時聯(lián)系作者!", "系統(tǒng)錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
      string str = "";
      Exception error = e.ExceptionObject as Exception;
      string strDateInfo = "出現(xiàn)應(yīng)用程序未處理的異常:" + DateTime.Now.ToString() + "\r\n";
      if (error != null)
      {
        str = string.Format(strDateInfo + "Application UnhandledException:{0};\n\r堆棧信息:{1}", error.Message, error.StackTrace);
      }
      else
      {
        str = string.Format("Application UnhandledError:{0}", e);
      }
      writeLog(str);
//frmBug f = new frmBug(str);//友好提示界面
      //f.ShowDialog();
      MessageBox.Show("發(fā)生致命錯誤,請停止當(dāng)前操作并及時聯(lián)系作者!", "系統(tǒng)錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    /// <summary>
    /// 寫文件
    /// </summary>
    /// <param name="str"></param>
    static void writeLog(string str)
    {
      if (!Directory.Exists("ErrLog"))
      {
        Directory.CreateDirectory("ErrLog");
      }
      using (StreamWriter sw = new StreamWriter(@"ErrLog\ErrLog.txt", true))
      {
        sw.WriteLine(str);
        sw.WriteLine("---------------------------------------------------------");
        sw.Close();
      }
    }
  }
}

本文實例配有較為詳盡的注釋,便于大家閱讀理解。希望本文所述對大家的C#程序設(shè)計有所幫助。

相關(guān)文章

  • C#中String和StringBuilder的簡介與區(qū)別

    C#中String和StringBuilder的簡介與區(qū)別

    今天小編就為大家分享一篇關(guān)于C#中String和StringBuilder的簡介與區(qū)別,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • C#爬取動態(tài)網(wǎng)頁上信息得流程步驟

    C#爬取動態(tài)網(wǎng)頁上信息得流程步驟

    動態(tài)內(nèi)容網(wǎng)站使用 JavaScript 腳本動態(tài)檢索和渲染數(shù)據(jù),爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的,這篇文章主要給大家詳細(xì)介紹了C#爬取動態(tài)網(wǎng)頁上信息得流程步驟,需要的朋友可以參考下
    2024-10-10
  • C#中的GDI+圖像編程詳解

    C#中的GDI+圖像編程詳解

    本文詳細(xì)講解了C#中的GDI+圖像編程,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#私有構(gòu)造函數(shù)使用示例

    C#私有構(gòu)造函數(shù)使用示例

    本文主要介紹了C#私有構(gòu)造函數(shù)使用方法,私有構(gòu)造函數(shù)是一種特殊的實例構(gòu)造函數(shù)。它通常用在只包含靜態(tài)成員的類中。如果類具有一個或多個私有構(gòu)造函數(shù)而沒有公共構(gòu)造函數(shù),則其他類(除嵌套類外)無法創(chuàng)建該類的實例
    2014-01-01
  • C#之線程同步Mutex類方式

    C#之線程同步Mutex類方式

    這篇文章主要介紹了C#之線程同步Mutex類方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • 基于WebRequest.RegisterPrefix的使用詳解

    基于WebRequest.RegisterPrefix的使用詳解

    本篇文章對WebRequest.RegisterPrefix的使用進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#中實現(xiàn)PriorityQueue優(yōu)先級隊列的代碼

    C#中實現(xiàn)PriorityQueue優(yōu)先級隊列的代碼

    這篇文章主要介紹了C#中PriorityQueue優(yōu)先級隊列的實現(xiàn),構(gòu)造初始化這部分主要介紹關(guān)鍵的字段和方法,比較器的初始化以及堆的初始化,需要的朋友可以參考下
    2021-12-12
  • C#實現(xiàn)QQ聊天窗口

    C#實現(xiàn)QQ聊天窗口

    這篇文章主要為大家詳細(xì)介紹了C#實現(xiàn)QQ聊天窗口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • unity shader實現(xiàn)玻璃折射效果

    unity shader實現(xiàn)玻璃折射效果

    這篇文章主要為大家詳細(xì)介紹了unity shader實現(xiàn)玻璃折射效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 輕松學(xué)習(xí)C#的ArrayList類

    輕松學(xué)習(xí)C#的ArrayList類

    輕松學(xué)習(xí)C#的ArrayList類,對C#的ArrayList類感興趣的朋友可以參考本篇文章,幫助大家更靈活的運用C#的ArrayList類
    2015-11-11

最新評論

仙游县| 河北区| 阜南县| 廊坊市| 浏阳市| 安图县| 镇远县| 晴隆县| 龙江县| 岳阳市| 无为县| 封丘县| 安仁县| 建水县| 曲松县| 丽水市| 呈贡县| 思茅市| 平潭县| 新干县| 彭州市| 积石山| 曲靖市| 伊宁县| 霍林郭勒市| 南丰县| 青冈县| 文水县| 登封市| 贵南县| 察雅县| 军事| 安乡县| 土默特左旗| 双牌县| 建阳市| 留坝县| 迭部县| 宣武区| 呼玛县| 资源县|