program.cs

static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
ApplicationException.Run(call); // 调用异常信息捕获类,进行异常信息的捕获
}

// 应用程序,入口逻辑
public static void call()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

LogFile.instance.Start();
string Msg = string.Format("程序开始启动!!!");
LogFile.instance.LogInfo(Msg);
Application.Run(new FormMain());
}
}

ApplicationException.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Degassing
{
/// <summary>
/// 此类用于捕获Application异常信息
/// </summary>
class ApplicationException
{
/// <summary>
/// 定义委托接口处理函数,调用此类中的Main函数为应用添加异常信息捕获
/// </summary>
public delegate void ExceptionCall();

public static void Run(ExceptionCall exCall)
{
try
{
//设置应用程序处理异常方式:ThreadException处理
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
//处理UI线程异常
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
//处理非UI线程异常
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

if (exCall != null) exCall();
}
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);
Application.Exit();
}

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString());
MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
}

/// <summary>
/// 生成自定义异常消息
/// </summary>
/// <param name="ex">异常对象</param>
/// <param name="backStr">备用异常消息:当ex为null时有效</param>
/// <returns>异常字符串文本</returns>
static string GetExceptionMsg(Exception ex, string backStr)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("****************************异常文本****************************");
sb.AppendLine("【出现时间】:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
if (ex != null)
{
sb.AppendLine("【异常类型】:" + ex.GetType().Name);
sb.AppendLine("【异常信息】:" + ex.Message);
sb.AppendLine("【堆栈调用】:" + ex.StackTrace);
sb.AppendLine("【异常方法】:" + ex.TargetSite);
}
else
{
sb.AppendLine("【未处理异常】:" + backStr);
}
sb.AppendLine("***************************************************************");

string strMsg = sb.ToString();
WriteLog(strMsg);
return strMsg;
}

static void WriteLog(string msg)
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(Application.StartupPath + "/log/exception.txt", true))
{
file.WriteLine(msg);
}
}
}
}

最新文章

  1. 基于OpenCV 的iOS开发
  2. 在查询时将查询条件放入Session中,导出时直接根据qpniRGaFiler取查询条件即可
  3. Android俄罗斯方块AI设计文档
  4. C#中的 正则表达式
  5. [摘录]quarts :overview
  6. form程序的界面修改
  7. HDU3232 Crossing rivers
  8. Android:布局实例之模仿微信Tab
  9. Netbackup备份失败:ORA-19506 ORA-27028 ORA-19511
  10. 检索n以内所有素数
  11. opencv中遇到的的一些错误
  12. javascript 三种弹出对话框
  13. gtk+3.0的环境配置及基于gtk+3.0的python简单样例
  14. LeetCode第[4]题(Java):Median of Two Sorted Arrays 标签:Array
  15. NOIP2016 天天爱跑步 正解
  16. Swagger使用教程大全,从入门到精通
  17. unity协程coroutine浅析
  18. [Swift]LeetCode543. 二叉树的直径 | Diameter of Binary Tree
  19. Docker 安装redis(四)
  20. CSS 中的 BFC,IFC,GFC和FFC

热门文章

  1. 在单机上安装多个oracle实例
  2. 12. Integer to Roman[M]整数转罗马数字
  3. iris中间件
  4. ROS-动态参数
  5. 方括号在sqlserver中的作用
  6. SQL常用函数集锦
  7. js面向对象概念解析
  8. windows phone 页面主题设计
  9. gdal集成kml库的做法
  10. 在IIS 10中注册自定义的IHttpModule