一个通信的应用程序,运行一段时间后会抛出异常,提示调式或者取消的对话框,我程序里面都有try的,但是抓不到该异常,该程序有守护程序的,但是守护程序只能检测到该应用程序进程退出后的情况,这种应用程序抛出未处理异常的情况下,如果没人手动去点击取消按钮或者调式按钮的话,进程是在的,所以守护程序根据进程判断该应用是否正常就不行了,大家有什么办法能够检测到该异常,并通过我的守护程序让该应该重启的方法,请踊跃发表高见!
我的收获程序已经能够根据是否有该进程来重启该应用,主要解决抛出这种未处理的异常的方法。
Linux里面有进程挂起的概念,不知道这种抛出异常后,应用终止算不算进程挂起,但是Windows下如何检测呢?
我的收获程序已经能够根据是否有该进程来重启该应用,主要解决抛出这种未处理的异常的方法。
Linux里面有进程挂起的概念,不知道这种抛出异常后,应用终止算不算进程挂起,但是Windows下如何检测呢?
try
{
Application.Run(new Form12());
}
catch(Exception )
{ }
1.ApplicationException 类,该作为用户定义的应用程序异常类型的基类. 2. SystemException类,该类型是预定义的公共语言运行库异常类的基类.
这两个异常类构成了几乎所有的应用程序和运行库异常的基础. . 当错误(这些错误是失败的运行库检查,如数组越界等错误导致的)发生时, 运行库就会引发SystemException或其派生类类型的异常. . 相反ApplicationException类型异常是由用户程序引发,而不是由运行库引发.如果要创建自己的异常的,应从 ApplicationException 或Exception 类派生这些异常. 不建议捕捉 SystemException, 在应用程序中引发SystemException 也不是好的编程做法. 而通常,大多数直接从Exception派生的异常不需要为 Exception类添加任何功能.
在Program里,加一个try catch;
捕捉ApplicationException 异常,这样子,即使程序里try...catch漏掉的异常,都会捕捉到
Application.Current.DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(Current_DispatcherUnhandledException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/afc1fdbd-0cad-4bd2-83a1-b68069c99720/
{
Application.Run(new Form12());
}
catch(Exception ex)
{
throw new Exception(ex.message.tostring())
}
static void Main()
{
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MDI());
}
private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
Application.Restart();
}
//处理未捕获的异常
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
//处理UI线程异常
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
//处理非UI线程异常
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
#region 处理未捕获异常的挂钩函数
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
Exception error = e.Exception as Exception;
if (error != null)
{
LogRecord.putErrorLog(string.Format("出现应用程序未处理的异常\n异常类型:{0}\n异常消息:{1}\n异常位置:{2}\n",
error.GetType().Name, error.Message, error.StackTrace), "main");
}
else
{
LogRecord.putActionLog(string.Format("Application ThreadError:{0}", e));
}
} static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
cn.ccets.papercontrol.FullScreenHandle.ShowTray();
Exception error = e.ExceptionObject as Exception;
if (error != null)
{
LogRecord.putActionLog(string.Format("Application UnhandledException:{0};\n堆栈信息:{1}", error.Message, error.StackTrace));
}
else
{
LogRecord.putActionLog(string.Format("Application UnhandledError:{0}", e));
}
} #endregion原文地址:http://blog.csdn.net/luminji/archive/2010/01/17/5197996.aspx#WPF的话12楼正解