VC语言

本类阅读TOP10

·VC++下使用ADO编写数据库程序
·VC++ 学习笔记(二)
·Windows消息大全
·每个开发人员现在应该下载的十种必备工具
·在2000和xp下,隐藏进程,VC6.0测试通过!!!
·用Visual C++打造IE浏览器(1)
·Netmsg 局域网聊天程序
·教你用VC6做QQ对对碰外挂程序
·VC++学习笔记(四)
·VC++中经常使用的函数!~~

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
利用自定义的异常处理重起你的应用程序

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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

 

 

 




相关文章

相关软件




月光软件程序下载编程文档电脑教程网站设计网址导航网络文学游戏天地幽默笑话生活休闲写作范文安妮宝贝
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有