Main函数添加监听
static void Main()
{
#region 监听全局异常输出
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
//处理UI线程异常
Application.ThreadException += Application_ThreadException;
//添加非UI上的异常.
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
#endregion
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form());
}
监听函数事件处理
#region 全局监听报错事件并写入log
/// <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);
}
LogErroWrite(str);
}
/// <summary>
/// 非ui线程报错
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
Exception ex = (Exception)e.ExceptionObject;
string errStr = "出现非ui线程的异常: " + DateTime.Now + "\r\n" + ex.Message + "\n\nStack Trace:\n" + ex.StackTrace;
LogErroWrite(errStr);
}
catch (Exception ex)
{
try
{
MessageBox.Show(ex.Message);
}
finally
{
Application.Exit();
}
}
}
/// <summary>
/// 将错误日志写入到文件
/// </summary>
/// <param name="str"></param>
public static void LogErroWrite(string str)
{
string basePath = Application.StartupPath + @"\Log";
if (!Directory.Exists(basePath))
{
Directory.CreateDirectory(basePath);
}
string fileName = DateTime.Now.ToString("yyyy-MM-dd") + "_ErrLog.txt";
fileName = Path.Combine(basePath, fileName);
using (var sw = new StreamWriter(fileName, true))
{
sw.WriteLine("---------------------------------------------------------");
sw.WriteLine(DateTime.Now.ToString("HH:mm:ss"));
sw.WriteLine(str);
sw.WriteLine("---------------------------------------------------------");
sw.WriteLine("");
sw.Close();
}
}
#endregion