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

          C++技巧:利用自定义的异常处理重起你的应用程序

     当利用.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);

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值