一个通信的应用程序,运行一段时间后会抛出异常,提示调式或者取消的对话框,我程序里面都有try的,但是抓不到该异常,该程序有守护程序的,但是守护程序只能检测到该应用程序进程退出后的情况,这种应用程序抛出未处理异常的情况下,如果没人手动去点击取消按钮或者调式按钮的话,进程是在的,所以守护程序根据进程判断该应用是否正常就不行了,大家有什么办法能够检测到该异常,并通过我的守护程序让该应该重启的方法,请踊跃发表高见!
我的收获程序已经能够根据是否有该进程来重启该应用,主要解决抛出这种未处理的异常的方法。
Linux里面有进程挂起的概念,不知道这种抛出异常后,应用终止算不算进程挂起,但是Windows下如何检测呢?

解决方案 »

  1.   

    在program.cs中添加try包含:
                try
                {
                    Application.Run(new Form12());
                }
                catch(Exception )
                {            }
      

  2.   

    C# 异常之体系
    1.ApplicationException 类,该作为用户定义的应用程序异常类型的基类.    2. SystemException类,该类型是预定义的公共语言运行库异常类的基类. 
    这两个异常类构成了几乎所有的应用程序和运行库异常的基础. . 当错误(这些错误是失败的运行库检查,如数组越界等错误导致的)发生时, 运行库就会引发SystemException或其派生类类型的异常. . 相反ApplicationException类型异常是由用户程序引发,而不是由运行库引发.如果要创建自己的异常的,应从 ApplicationException 或Exception 类派生这些异常. 不建议捕捉 SystemException, 在应用程序中引发SystemException 也不是好的编程做法. 而通常,大多数直接从Exception派生的异常不需要为 Exception类添加任何功能. 
      

  3.   

    忘记说了,是WPF的应用程序,1楼大哥那个方法好像行不通
      

  4.   


    在Program里,加一个try catch;
    捕捉ApplicationException 异常,这样子,即使程序里try...catch漏掉的异常,都会捕捉到
      

  5.   

    加一个处理异常的handler
    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/
      

  6.   

               try
                {
                    Application.Run(new Form12());
                }
                catch(Exception ex)
                {
                     throw new Exception(ex.message.tostring())
                }
      

  7.   


            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();
            }
      

  8.   

    WinForm里面处理未处理的异常需要注册一下两个Handler
    //处理未捕获的异常
                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楼正解