纯自己记录
在运行有可能出问题的 语句前,将函数添加进事件
取当前作用域
//AppDomain currentDomain = AppDomain.CurrentDomain;
当前作用域出现未捕获异常时,使用MyHandler函数响应事件
//currentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
// 当前作用域出现未捕获异常时,使用MyHandler函数响应事件
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
try
{
Task taskRestart = Task.Factory.StartNew(() => eventRestart(m_logger,this));
//taskRestart.Start();在上一句eventRestart已经调用了 不需要start再调一遍
return;
}
catch (Exception ex)
{
m_logger.LogError("重新启动错误:"+ ex.ToString());
}
函数本体:
// 函数处理后异常会继续,不需要重新抛出异常
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Exception ex = e.ExceptionObject as Exception;
if (null == ex)
{
m_logger.LogError("兜底处理所有未处理的异常Unhandled Exception");
}
else
{
m_logger.LogError("测试m_logger有没有问题");
m_logger.LogError("兜底处理所有未处理的异常Unhandled Exception", ex.ToString());
}
}
---------------------------还有一种,只是可以通过状态看到是否成功 但不知道原因的--------------------------
主要运行是Process.Start(psi),通过看process的状态
Process process = Process.Start(psi);
StreamReader myStreamReader = process.StandardError;
Thread.Sleep(3000);//停3秒,等那边开始运行,再获取状态 不然还没运行就拿状态 没用
bool isExited = process.HasExited;//遇到错误就会关闭/终止 存在就是没错
if (isExited)
{
// myStreamReader.Seek(0, SeekOrigin.Current)
Console.WriteLine("打印信息" + myStreamReader.ReadToEnd());
}
Console.WriteLine("process" + process.ToString());