/// <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);
文章列表