异常统一处理事件,在线等!

KC_Favourite 2008-09-08 10:00:51
我有两个自定义的异常类ActivityTypeNotFindException和ActivityTypeDeleteException
这两个异常都有三个构造方法,例如
class ActivityTypeNoFindException : BussinessApplicationException
{
public ActivityTypeNoFindException(): base()
{
}

public ActivityTypeNoFindException(string message)
: base(message)
{

}
public ActivityTypeNoFindException(string message, Exception inner)
: base(message, inner)
{
}

他们都继承BusinessApplicationException,而BusinessApplicationException继承BaseException
存在一个异常统一处理的类GlobalExceptionHandler,其中有一个异常统一处理方法ExceptionHandle()
现在问题是当throw一个异常后,我在ExceptionHandle()里如何判断是哪个异常?
还需要在什么地方添加什么语句么?
...全文
158 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
KC_Favourite 2008-09-08
  • 打赏
  • 举报
回复
十分感谢PHY,结贴,哈
怫悰 2008-09-08
  • 打赏
  • 举报
回复
冒泡绑定接分

可不可以用本方法Exception.InnerException遍历?
KC_Favourite 2008-09-08
  • 打赏
  • 举报
回复
zz
brallow 2008-09-08
  • 打赏
  • 举报
回复
这个不是没用过,是设计的问题。比如如果你觉得用Typeof什么的太麻烦。你可以把你自己设计的所有的Exception(你不是设计了一个基类BaseException吗?就放这里)中添加一个属性比如:
public class BaseException:Exception
{
public int ExceptionCode{get;set;}
}
然后你在每个不同的异常里不同的ExceptionCode代码,出现异常时你根据这个来判断就是了。这与Type并无本质的区别,不过可能在你的Exception超乎寻常的多的情况下略有些效率上的提升。对了,如果你使用这个方案,由于在那个委托中传递的是Exception类的对象,你要使用这个属性得先执行一个这个操作:
Exception e;
BaseException be = e as BaseException;
if(be==null) //...错误,转换不成功
KC_Favourite 2008-09-08
  • 打赏
  • 举报
回复
谢了,这个上面说了
KC_Favourite 2008-09-08
  • 打赏
  • 举报
回复
怎么回复总看不见呢
愚痴鱼 2008-09-08
  • 打赏
  • 举报
回复
现在问题是当throw一个异常后,我在ExceptionHandle()里如何判断是哪个异常?


e.GetType()总能得到最正确的类型,这样就知道到底是哪个异常了
KC_Favourite 2008-09-08
  • 打赏
  • 举报
回复
........................................................................................
KC_Favourite 2008-09-08
  • 打赏
  • 举报
回复
还有就是您说的最后一句“当然你也可以在Exception的其它属性中添加自己的类型标记。”我不是很理解,没有用过,呵呵,不好意思,我是新手,不懂的太多了!
KC_Favourite 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 phy 的回复:]
你这样用没问题吗?
你传入ThreadExceptionEventHandler的委托签名必须是:

C# code
public delegate void ThreadExceptionEventHandler(
Object sender,
ThreadExceptionEventArgs e
)



所以你的ExceptionHandler本身就必须声明成:

C# code
public static void EventHandler(Object sender,ThreadExceptionEventArgs e)
{
//...
}



然后如何处理就和我上面的帖子说的一样,typeof,Ge…
[/Quote]

我的ExceptionHandler是像你说的那样声明的,只是您说的public delegate void ThreadExceptionEventHandler(
Object sender,
ThreadExceptionEventArgs e
)
这个需要加在程序中什么地方啊?我好像没有用到!谢谢
lude8880 2008-09-08
  • 打赏
  • 举报
回复
instanceof
KC_Favourite 2008-09-08
  • 打赏
  • 举报
回复
怎么看不到回复了呢,晕
brallow 2008-09-08
  • 打赏
  • 举报
回复
你这样用没问题吗?
你传入ThreadExceptionEventHandler的委托签名必须是:

public delegate void ThreadExceptionEventHandler(
Object sender,
ThreadExceptionEventArgs e
)

所以你的ExceptionHandler本身就必须声明成:

public static void EventHandler(Object sender,ThreadExceptionEventArgs e)
{
//...
}

然后如何处理就和我上面的帖子说的一样,typeof,GetType这两种方法来判断是否和特定的异常类相同。当然你也可以在Exception的其它属性中添加自己的类型标记。
KC_Favourite 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 phy 的回复:]

.NET自带的 Application对象有一个ThreadException事件,你处理这个事件也可以捕捉线程中未处理的异常。
[/Quote]

这个需要在主函数里加这个吧?
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(GlobalExceptionHandler.ExceptionHandler);
我就是这样用的,不知道有什么问题?那些构造函数里需要再写些什么么?
格拉 2008-09-08
  • 打赏
  • 举报
回复
帮顶
brallow 2008-09-08
  • 打赏
  • 举报
回复
这个GlobalExceptionhandler是你自己写的话,这个ExceptionHandle肯定要传入一个Exception参数吧?那你取得它的类型进行判断不就得了。
比如:

public static void ExceptionHandle(Exception e)
{
if(e.GetType() == typeof(ActivityTypeNoFindException))
{
//...
}
}

.NET自带的 Application对象有一个ThreadException事件,你处理这个事件也可以捕捉线程中未处理的异常。
KC_Favourite 2008-09-08
  • 打赏
  • 举报
回复
、,、

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧