文章出處

/// <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);


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()