根據網上的資料稍微修改了一下,原理很簡單,代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Text;
namespace WindowsFormsApplication2
{
static class Program
{
/// <summary>
/// 應用程式的主入口點,
/// </summary>
[STAThread]
static void Main()
{
GlobalExceptionCapture(() =>
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
});
}
static void GlobalExceptionCapture(Action mainContent)
{
try
{
//設定應用程式處理例外方式:ThreadException處理
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
//處理UI執行緒例外
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
//處理非UI執行緒例外
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
#region 應用程式Main()內容包裝的委托
mainContent();
#endregion
}
catch (Exception ex)
{
string str = GetExceptionMsg(ex, string.Empty);
MessageBox.Show(str, "系統錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
string str = GetExceptionMsg(e.Exception, e.ToString());
MessageBox.Show(str, "系統錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
//Log.Write(str);
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString());
MessageBox.Show(str, "系統錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
//Log.Write(str);
}
/// <summary>
/// 生成自定義例外訊息
/// </summary>
/// <param name="ex">例外物件</param>
/// <param name="backStr">備用例外訊息:當ex為null時有效</param>
/// <returns>例外字串文本</returns>
static string GetExceptionMsg(Exception ex, string backStr)
{
StringBuilder sbr = new StringBuilder();
sbr.AppendLine("****************************例外文本****************************");
sbr.AppendLine("【出現時間】:" + DateTime.Now.ToString());
if (ex != null)
{
sbr.AppendLine("【例外型別】:" + ex.GetType().Name);
sbr.AppendLine("【例外資訊】:" + ex.Message);
sbr.AppendLine("【堆疊呼叫】:" + ex.StackTrace);
sbr.AppendLine("【例外物件】:" + ex.Source);
sbr.AppendLine("【觸發方法】:" + ex.TargetSite);
}
else
{
sbr.AppendLine("【未處理例外】:" + backStr);
}
sbr.AppendLine("***************************************************************");
return sbr.ToString();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/126.html
標籤:WinForm
