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); }
分类:
Microsoft--.Net
posted on 2019-06-05 16:53 K丶Formular 阅读(1119) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现