using System;
using System.Collections.Generic;
using System.Text;
namespace WUtility.Common
{
public class ActionHelper
{
private static Action<Exception> _dealException;
public static event Action<Exception> DealException
{
add { _dealException += value; }
remove { if (_dealException != null) _dealException -= value; }
}
/// <summary>
/// 通用的异常处理
/// </summary>
/// <param name="action">对应事件逻辑</param>
/// <param name="state">参数值</param>
public static void SafeInvoke(Action<object> action, object state)
{
try
{
if (action == null) return;
action.Invoke(state);
}
catch (Exception ex)//按异常类型区分处理
{
if (_dealException != null)
_dealException(ex);
}
}
/// <summary>
/// 通用的异常处理
/// </summary>
/// <param name="method"></param>
/// <param name="obj"></param>
public static void SafeInvoke(Delegate method, params object[] obj)
{
try
{
if (method == null) return;
if (obj.Length == 0)
method.DynamicInvoke(null);
else if (obj.Length == 1)
method.DynamicInvoke(obj[0]);
else if (obj.Length == 2)
method.DynamicInvoke(obj[0], obj[1]);
}
catch (Exception ex)//按异常类型区分处理
{
if (_dealException != null)
_dealException(ex);
}
}
}
}
private void button20_Click(object sender, EventArgs e)
{
ActionHelper.DealException += (obj) =>
{
var szInfo = obj.Message;
MessageBox.Show(szInfo);
};
var k = 20 - 20;
ActionHelper.SafeInvoke((obj) => { MessageBox.Show("SafeInvokeAcion" + (50 / k)); }, null);
}
private void button21_Click(object sender, EventArgs e)
{
ActionHelper.SafeInvoke(new TestInvoke(TestSafeInvokeDelegate), "12345", "678910");
}
private delegate void TestInvoke(string szInfo, string szInfo2);
private void TestSafeInvokeDelegate(string szInfo, string szInfo2)
{
var info = szInfo + "^" + szInfo2;
MessageBox.Show(info);
}