利用自定义的异常处理重起你的应用程序

原创 2004年06月15日 10:57:00

          C++技巧:利用自定义的异常处理重起你的应用程序<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

     当利用.NET结构时,你将执行try/catch块去处理你的应用程序期待的特殊异常。.NET的一个能力是你可以用自定义的异常处理去抓取你的应用程序在运行过程中被抛弃的未被处理的异常。这就允许你可以用控制的方式去终止你的程序和完成任何的程序清除和错误记录。

当一个客户需要应用程序记录不被处理异常和需要自动重起时我就回经常用到这个特征。我将举例说明.NET如何完成这个功能。

1, 首先,创建一个C#应用程序(RestartApp

2, 加入下面的using声明。

        using System.Threading;

  

3, 加入下面的自定义异常处理类,你可以看到其中只包含两种方法:

· OnThreadException-记录异常,告诉用户应用程序将重起,关闭当前程序,然后重新启动,在下一步你将看到这个方法将如何被自动调用作为结构对异常处理的反应。

· LogException-这是一个简单的记录方法(被OnThreadException调用)将未被处理的异常写到以当前日期为文件名的文件中。

1.           // Custom Exception class to catch all "unhandled exceptions"

2.           public class CustomExceptionHandler

3.           {

4.             // Event handler that will be called when an unhandled

5.             // exception is caught

6.             public void OnThreadException(object sender,

7.                                           ThreadExceptionEventArgs t)

8.             {

9.               // Log the exception to a file

10.           LogException(t.Exception);

11.      

 

12.           // Tell the user that the app will restart

13.           MessageBox.Show("A Fatal Error was detected and logged.

14.                            Click the OK button to restart the

15.                            application",

16.                            "Fatal Application Error",

17.                            MessageBoxButtons.OK, MessageBoxIcon.Stop);

18.      

 

19.           // Shut down the current app instance

20.           Application.Exit();

21.      

 

22.           // Restart the app

23.           System.Diagnostics.Process.Start(Application.ExecutablePath);

24.         }

25.      

 

26.         // *Very* simple logging function to write exception details

27.         // to disk

28.         protected void LogException(Exception e)

29.         {

30.           DateTime now    = System.DateTime.Now;

31.           string error    = e.Message + "/n/nStack Trace:/n"

32.                                       + e.StackTrace;

33.           string filename = String.Format("Log-{0}{1}{2}-{3}{4}

34.                                           {5}.txt",

35.                                           now.Year.ToString(),

36.                                           now.Month.ToString(),

37.                                           now.Day.ToString(),

38.                                           now.Hour, now.Minute,

39.                                           now.Second);

40.      

 

41.           StreamWriter stream = null;

42.           try

43.           {

44.             stream = new StreamWriter(filename, false);

45.             stream.Write(error);

46.           }

47.           catch(Exception ex)

48.           {

49.             MessageBox.Show(ex.Message);

50.           }

51.           finally

52.           {

53.             if (null != stream)

54.               stream.Close();

55.           }

56.         }

57.       };

当加入自定义异常处理类后,通过将下面两行代码加入到主函数中(在Application.Run前面)使它融入到结构中,当第二行将CustomExceptionHandler.OnThreadException附加到TreadException事件时第一行将实例化先前已定义的类,当一个异常没被处理被抛弃后,OnTreadException将被自动调用。

58.       CustomExceptionHandler eh    = new CustomExceptionHandler();

59.       Application.ThreadException += new System.Threading.

60.                                      ThreadExceptionEventHandler(eh.OnThreadException);

 

 

 

利用自定义的异常处理重起你的应用程序(续)

(接上)当加入自定义异常处理类后,通过将下面两行代码加入到主函数中(在Application.Run前面)使它融入到结构中,当第二行将CustomExceptionHandler.OnThreadEx...
  • wxfnj
  • wxfnj
  • 2004年06月16日 15:21
  • 559

深入解析结构化异常处理(SEH)

深入解析结构化异常处理(SEH) 一直对Windows异常处理的原理似懂非懂, 看了下面的文章 ,一切都豁然开朗. 1997年文章,Windows技术的根一直没变: http://www.mic...
  • u011565209
  • u011565209
  • 2016年06月27日 18:33
  • 1855

接受男生的告白之前一定要三思

他能不能承担得起你的饭量承受得住你的力量背负得起你的重量
  • Px01Ih8
  • Px01Ih8
  • 2018年01月22日 00:00
  • 86

通过spring的aop统一拦截Exception抛出自定义异常

通过spring的aop统一拦截Exception抛出自定义异常 Spring配置部分 Xml代码 xml version="1.0" encoding="UTF-8"?>  ...
  • truelove12358
  • truelove12358
  • 2014年09月19日 12:07
  • 787

程序员你伤不起

程序员你伤不起这是我最近读的一本关于程序员经历的书。 这本书的作者是吉日噶拉(在外企、上市公司工作过,自己也创业失败过,遇到过很多失败挫折,甚至露宿街头,但是最后还是挺过来了),是一个十几年的程序员...
  • wenzhi20102321
  • wenzhi20102321
  • 2017年05月21日 11:11
  • 1116

springmvc 自定义异常处理

springmvc利用HandlerExceptionResolver处理程序的异常,包括处理映射映射异常,数据绑定,处理器执行过程中发生的异常public interface HandlerExce...
  • yingxiake
  • yingxiake
  • 2016年04月14日 11:27
  • 4409

应用程序重起自身等几则技巧

应用程序重起自身等几则技巧转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd作者联系方式:Li XianJing 更新时间:2006-12-19 1.       ...
  • absurd
  • absurd
  • 2006年10月09日 21:59
  • 3828

从Linux到Soalris

OpenSolaris对于很多人来说还是很陌生的。也许很多人熟悉Linux或者对于FreeBSD之类的UNIX或类UNIX系统有所了解,但对于Solaris的新功能(ZFS,Container,Dtr...
  • hotsolaris
  • hotsolaris
  • 2007年06月28日 10:26
  • 846

tp5 ThinkPhp5 自定义异常处理类(先留坑

//我先写点前期的准备,先留坑,后面有机会把他写完,填坑完 在项目的开发过程中异常抛出尤为重要不仅能够做出友好提示帮助掩盖我们伟大的程序员们尴尬的瞬间,还能做到提示开发人员代...
  • whulovely
  • whulovely
  • 2017年09月18日 21:37
  • 670

GIT服务

 服务器上的 Git 到目前为止,你应该已经学会了使用 Git 来完成日常工作。然而,如果想与他人合作,还需要一个远程的 Git 仓库。尽管技术上可以从个人的仓库里推送和拉取修改内容,但我们不...
  • zxxSsdsd
  • zxxSsdsd
  • 2016年08月25日 14:13
  • 278
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用自定义的异常处理重起你的应用程序
举报原因:
原因补充:

(最多只允许输入30个字)