一般的经验法则是,只有在您可以实际采取措施时才能捕获异常。因此,在业务或数据层,您只会在以下情况下捕获异常:
try
{
this.Persist(trans);
}
catch(Exception ex)
{
trans.Rollback();
throw ex;
}
我的业务/数据层尝试保存数据 - 如果生成异常,则回滚所有事务并将异常发送到 UI 层。
在 UI 层,你可以实现一个通用的异常处理程序:
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
然后处理所有异常。它可能会记录异常,然后显示用户友好的响应:
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
LogException(e.Exception);
}
static void LogException(Exception ex)
{
YYYExceptionHandling.HandleException(ex,
YYYExceptionHandling.ExceptionPolicyType.YYY_Policy,
YYYExceptionHandling.ExceptionPriority.Medium,
"An error has occurred, please contact Administrator");
}
在实际的 UI 代码中,如果您打算做一些不同的事情 - 例如显示不同的友好消息或修改屏幕等,您可以捕获个别异常。
另外,提醒一下,始终尝试处理错误 - 例如除以 0 - 而不是抛出异常。