• C# 异常统一处理方式


    Exception 统一处理

    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);
            }
  • 相关阅读:
    android 如何在手机上 安装两个同样的app
    Ubuntu 16.04 安装Gitlab
    VScode开发C++常用插件
    过滤text字段为空的数据
    ES标签搜索并解决评分排序问题
    3
    2
    1
    9
    Maven3种打包方式
  • 原文地址:https://www.cnblogs.com/aisa-thanatos/p/10980552.html
Copyright © 2020-2023  润新知