日期:2014-05-18  浏览次数:20655 次

异常 框架 求解!!!
一个实现类 Class1. 类的某个过程发现异常(也可以自己丢出一个字符串当作异常的信息).这时候要吧异常的信息传递到 调用Class1的类.

用事件.发现弄到后面很不规范
谢谢!!

------解决方案--------------------
尝试一下:

class C{
public event EventHandler SendError;
protected virtual void OnSendError(){
if(this.SendError!=null)
{
this.SendError(this,new EventArgs());
}
}
public string Message{get;private set;}
void Process(){
try{
//...
}
catch(Exception e)
{
this.Message=e.Message;
this.OnSendError();
}
}
}
class App{
C c;
public App(){c=new C();c.SendError+=this.c_SendErorr;}
void c_SendErorr(object sender,EventArgs e)
{
C c=sender as C;
MessageBox.Show(c.Message);
}
void Test(){
this.c.Process();
}
}
------解决方案--------------------
楼主已经开始在想设计的事情了,其实我觉得这个事情你可以这样来做:
1:分析你的过程调用的流程。
2:找到一个地方统一处理你的异常。

其它地方不处理异常或者处理后重新抛出。
------解决方案--------------------
用一个地方来统一处理所有异常 ,这对于后面程序复杂后,非常有帮助,写程序时尽量要顾全大局,从整体着手,否则程序的框架会很散!
------解决方案--------------------
既然是一场处理。那么就直接抛出去就行了啊。还要用什么事件呢?
------解决方案--------------------
你可以在程序入口处加上一个委托
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(类名.方法);
然后在方法中去统一处理异常,系统的异常或自定义异常
如Class1中有个ExceptionHandle这个方法
public static class Class1
{
/// <summary>
/// 统一异常处理方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public static void ExceptionHandler(object sender, System.Threading.ThreadExceptionEventArgs e)
{
//判断是系统异常还是自定义异常
if (e.Exception is BaseException)
{
//显示异常信息
MessageBox.Show(e.Exception.Message);
//记录异常信息日志
Log.Info(e.Exception.Message);
//记录异常的堆栈信息
Log.Info(e.Exception.StackTrace);
}
else
{
MessageBox.Show("无法正常操作,请联系管理员!");
}
}
}

BaseException可以继承Exception,而你自定义异常类继承BaseException,可以用几种构造方法去具体实现异常的处理