错误统一捕捉处理新方式

/// <summary>
/// 要执行的方法
/// </summary>
public delegate void MethodToDo();
/// <summary>
/// 处理错误的方法
/// </summary>
/// <param name="e">错误对象</param>
public delegate void MethodDealException(Exception e);
/// <summary>
/// 将方法用try - catch块包围
/// </summary>
public class TryCatch
{
private event MethodToDo methodToDo;
private event MethodDealException methodDealException;
/// <summary>
/// 将方法用try - catch块包围
/// </summary>
/// <param name="methodToDo">要执行的方法</param>
public TryCatch(MethodToDo methodToDo)
{
this.methodToDo += methodToDo;
Do();
}
/// <summary>
/// 将方法用try - catch块包围
/// </summary>
/// <param name="methodToDo">要执行的方法</param>
/// <param name="methodDealException">处理错误的方法</param>
public TryCatch(MethodToDo methodToDo, MethodDealException methodDealException)
{
this.methodToDo += methodToDo;
this.methodDealException += methodDealException;
Do();
}
public void Do()
{
if (this.methodToDo != null)
{
//获得委托列表
Delegate[] arr = this.methodToDo.GetInvocationList();
foreach (Delegate d in arr)
{
try
{
MethodToDo method = (MethodToDo)d;
//同步执行方法
method.Invoke();
}
catch (Exception ex)
{
if (this.methodDealException != null) //执行自定义错误处理方法
{
Delegate[] err = this.methodDealException.GetInvocationList();
foreach (Delegate de in err)
{
MethodDealException me = (MethodDealException)de;
me.Invoke(ex);
}
}
else //执行统一的错误处理方法
{
throw ex;
}
}
}
}
}
}

调用:

private void cal()  
{  
     int i = calInt("a");  
}  
private int calInt(string p)  
{  
    return int.Parse(p);  
}  

  

new TryCatch(cal);

原文地址:https://www.cnblogs.com/XuPengLB/p/7382151.html