c# winform捕获全局异常,并记录日志
2023-09-11 14:21:59 时间
c# winform捕获全局异常,并记录日志
2016-09-23 13:55 by newbirth, 6247 阅读, 0 评论, 收藏, 编辑
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.IO;
namespace OrderSplit
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
try
{
//处理未捕获的异常
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
//处理UI线程异常
Application.ThreadException += Application_ThreadException;
//处理非UI线程异常
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
catch (Exception ex)
{
var strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now + "\r\n";
var str = string.Format(strDateInfo + "异常类型:{0}\r\n异常消息:{1}\r\n异常信息:{2}\r\n",
ex.GetType().Name, ex.Message, ex.StackTrace);
WriteLog(str);
MessageBox.Show("发生错误,请查看程序日志!", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
Environment.Exit(0);
}
}
/// <summary>
///错误弹窗
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
string str;
var strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now + "\r\n";
var error = e.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("应用程序线程错误:{0}", e);
}
WriteLog(str);
MessageBox.Show("发生错误,请查看程序日志!", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
Environment.Exit(0);
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
var error = e.ExceptionObject as Exception;
var strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now + "\r\n";
var str = error != null ? string.Format(strDateInfo + "Application UnhandledException:{0};\n\r堆栈信息:{1}", error.Message, error.StackTrace) : string.Format("Application UnhandledError:{0}", e);
WriteLog(str);
MessageBox.Show("发生错误,请查看程序日志!", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
Environment.Exit(0);
}
/// <summary>
/// 写文件
/// </summary>
/// <param name="str"></param>
static void WriteLog(string str)
{
if (!Directory.Exists("ErrLog"))
{
Directory.CreateDirectory("ErrLog");
}
using (var sw = new StreamWriter(@"ErrLog\ErrLog.txt", true))
{
sw.WriteLine(str);
sw.WriteLine("---------------------------------------------------------");
sw.Close();
}
}
}
}
相关文章
- C# WinForm MessageBox弹窗倒计时的自动关闭
- C# WinForm窗体 控件Control 的 Invalidate、Update、Refresh的区别
- WinForm实现简单的拖拽功能(C#)
- C# WinForm控件、自定义控件整理(大全)
- 重新整理数据结构与算法(c#)—— 树的节点删除[十八]
- C# SQLite数据库 访问封装类
- C#中使用 Oracle的事务与存储过程
- C# 二维码生成
- C# 判断字符串是否可以转化为数字
- C# DataSet.RejectChanges 方法
- Atitit.java c#.net php项目中的view复用(jsp,aspx,php的复用)
- Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python
- c#winform主题实现的一个方法
- (八十六)c#Winform自定义控件-表格优化-HZHControls
- (八十四)c#Winform自定义控件-导航菜单(Ribbon菜单)-HZHControls
- (七十八)c#Winform自定义控件-倒影组件-HZHControls
- (五十三)c#Winform自定义控件-滚动文字-HZHControls
- (三十六)c#Winform自定义控件-步骤控件-HZHControls
- (二十七)c#Winform自定义控件-多输入窗体-HZHControls
- (六)c#Winform自定义控件-单选框-HZHControls
- C# Label显示多行文本及换行(WinForm/WebForm)
- 用C#Winform写个简单的批量清空文件内容和删除文件的小工具
- C#界面里的winform BackColor和BackgroundImage属性
- 让C#程序run anywhere 脱离.net Framework框架环境
- C#编写简易的上位机