C#.Net应用程序异常处理

1、普通异常 ,一般来说,能够预见的异常都要进行处理。主要是进行异常的捕捉处理。 try{}catch{}finally{}语句块是捕捉处理异常的语句块。在try里捕捉能够预见的异常, 在catch里处理捕捉的异常,而在finally语句是无论有没有发生异常都会执行到,一般是执行一些资源的关闭释放工作,防止内存的泄露。

2、向上层抛出, 在给别人提供二次开发的API时,如果在dll里捕捉了异常,有时必要向上层抛出已经捕捉的异常,让上层再进行处理,此时可以用到异常抛出语句throw,在抛出的异常时,要向客户提供API说明在什么情况下有异常抛出,让其在应用里添加异常的捕捉和处理。

3、 统回调函数的异常, 系 统回调函数一定要进行异常处理。如果一个系统回调函数不进行异常处理,则程序会把异常抛给系统,程序会出现崩溃的情况。而且无法得到错误的信息,开发者极 难调式。此类型的异常通常会在系统回调函数里进行处理。比较一个线程入口函数,一般可以在函数的开始地方进行try, 开始捕捉异常,这样可以避免程序把异常抛给系统。

4、处理未捕捉异常 , 在.Net环境中提供对未捕捉的异常进行系统级的捕捉,系统对运行的监视,如果一些未捕捉的异常则会向系统抛出,系统则会捕捉到此类异常。则开发者则需要向系统注册一个未捕捉的异常处理函数。下面是例子:

//处理未捕获的异常
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
//处理UI线程异常
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Appliction_ThreadException);
//处理非UI线程异常
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);


#region 处理未捕获异常的挂钩函数
static void Application_ThreadException(object sender, System.ThreadingExceptionEventArgs e)
{
     Exception error = e.Exception as Exception;
     if(null != error)
     {
         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(null != error)
     {
          LogRecord.putActionLog(string.Format("Application UnhandledException:{0};/n

             堆栈信息:{1}", error.Message, error.StackTrace));
     }
     else
     {
          LogRecord.putActionLog(string.Format("Application UnhandledError:{0}", e));
     }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值