a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

C#程序異常關閉時的捕獲

2019-10-29 21:01:16
字體:
來源:轉載
供稿:網友

本文主要以一個簡單的小例子,描述C# Winform程序異常關閉時,如何進行捕獲,并記錄日志。

概述

有時在界面的事件中,明明有try... catch 進行捕獲異常,但是還是會有異常關閉的情況,所以在程序中如何最終的記錄一些無法捕獲的異常,會大大方便問題的定位分析及程序優化。

涉及知識點

以下兩個異常事件,主要應用不同的場景。

  • Application.ThreadException 在發生應用程序UI主線程中未捕獲線程異常時發生,觸發的事件。
  • AppDomain.CurrentDomain.UnhandledException 當后臺線程中某個異常未被捕獲時觸發。

源代碼

主要程序(Program):

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace DemoException{  static class Program  {    /// <summary>    /// 應用程序的主入口點。    /// </summary>    [STAThread]    static void Main()    {      Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);      //處理UI線程異常      Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);      //處理非線程異常      AppDomain.CurrentDomain.UnhandledException +=new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException) ;      Application.EnableVisualStyles();      Application.SetCompatibleTextRenderingDefault(false);      Application.Run(new FrmMain());      glExitApp = true;//標志應用程序可以退出    }    /// <summary>    /// 是否退出應用程序    /// </summary>    static bool glExitApp = false;    /// <summary>    /// 處理未捕獲異常    /// </summary>    /// <param name="sender"></param>    /// <param name="e"></param>    private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)    {      SaveLog("-----------------------begin--------------------------");      SaveLog("CurrentDomain_UnhandledException"+DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));      SaveLog("IsTerminating : " + e.IsTerminating.ToString());      SaveLog(e.ExceptionObject.ToString());      SaveLog("-----------------------end----------------------------");      while (true)      {//循環處理,否則應用程序將會退出        if (glExitApp)        {//標志應用程序可以退出,否則程序退出后,進程仍然在運行          SaveLog("ExitApp");          return;        }        System.Threading.Thread.Sleep(2 * 1000);      };    }    /// <summary>    /// 處理UI主線程異常    /// </summary>    /// <param name="sender"></param>    /// <param name="e"></param>    private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)    {      SaveLog("-----------------------begin--------------------------");      SaveLog("Application_ThreadException:" + e.Exception.Message);      SaveLog(e.Exception.StackTrace);      SaveLog("-----------------------end----------------------------");    }    public static void SaveLog(string log)    {      string filePath =AppDomain.CurrentDomain.BaseDirectory+ @"/objPerson.txt";      //采用using關鍵字,會自動釋放      using (FileStream fs = new FileStream(filePath, FileMode.Append))      {        using (StreamWriter sw = new StreamWriter(fs, Encoding.Default))        {          sw.WriteLine(log);        }      }    }  }}

出錯的程序:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace DemoException{  public partial class FrmMain : Form  {    public FrmMain()    {      InitializeComponent();    }    private void FrmMain_Load(object sender, EventArgs e)    {          }    private void btnTestUI_Click(object sender, EventArgs e)    {      int a = 0;      int c = 10 / a;    }    private void btnTest2_Click(object sender, EventArgs e)    {      Thread t = new Thread(new ThreadStart(() =>      {        int a = 0;        int c = 10 / a;      }));      t.IsBackground = true;      t.Start();    }  }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 色婷婷小说 | 欧美一级片在线 | 中文字幕在线不卡 | 国产精品久久久久久久蜜臀 | 在线免费播放av | 青草草在线 | 天堂av中文| 日本黄网站在线观看 | 久久久久久亚洲av毛片大全 | 日韩天堂| 夜添久久精品亚洲国产精品 | 在线欧美一区 | 夜夜骑日日操 | 天天天色综合 | 国产精品一区二区福利视频 | 日韩精品资源 | 精品久久久一区 | 国产日韩欧美综合 | 中文字幕亚洲自拍 | 在线有码 | 一级毛片免费观看 | 日韩精品一区二区三区在线观看 | 亚洲狠狠久久综合一区77777 | 久久精品久久久 | 男女视频在线观看 | 色婷综合网 | 亚洲午夜精品一区二区三区他趣 | 免费一级欧美在线观看视频 | 欧美成人免费在线观看 | 最新国产成人 | 中文字幕在线观看第一页 | 国产成人精品亚洲男人的天堂 | 黄色av网站在线 | 日韩精品一区二区三区在线 | 日韩在线精品视频 | 蜜桃官网| 国产全黄 | 81精品国产乱码久久久久久 | 欧美成人影院在线 | 一区二区在线免费观看 | 亚洲一区二区免费在线观看 |