• 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);
            }
  • 相关阅读:
    jQuery获取鼠标事件源
    windows中MongoDB安装和环境搭建
    前端获取后台数据的方法:ajax、axios、fetch
    浅谈:easy-mock的使用
    安全篇-AES/RSA加密机制
    PHP开发api接口安全验证
    Ajax简单实现文件异步上传的多种方法
    PHP7有没有你们说的那么牛逼
    基于laravel框架构建最小内容管理系统
    redis用法分析
  • 原文地址:https://www.cnblogs.com/aisa-thanatos/p/10980552.html
Copyright © 2020-2023  润新知