c# 事件 发布订阅
public class MessageEx
{
/// <summary>
/// 定义数据暂存
/// </summary>
private static readonly Dictionary<string, List<Action<object>>> _handlers = new();
/// <summary>
/// 订阅事件
/// </summary>
/// <typeparam name="TEvent"></typeparam>
/// <param name="handler"></param>
public static void Subscribe(string key, Action<object> data)
{
if (!_handlers.ContainsKey(key))
{
_handlers.Add(key, new List<Action<object>>());
}
_handlers[key].Add(data);
}
// 取消订阅事件
/// <summary>
/// 取消订阅事件
/// </summary>
/// <typeparam name="TEvent"></typeparam>
/// <param name="handler"></param>
public static void Unsubscribe(string key, Action<object> handler)
{
if (!_handlers.ContainsKey(key))
{
return;
}
_handlers[key].Remove(handler);
}
/// <summary>
/// 发布事件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="eventToPublish"></param>
public static void Publish(string key, object data)
{
if (!_handlers.ContainsKey(key))
{
return;
}
// 使用 ToList 以避免在迭代时修改集合
foreach (var handler in _handlers[key].ToList())
{
handler(data);
}
}
}
留待后查,同时方便他人
联系我:renhanlinbsl@163.com
联系我:renhanlinbsl@163.com
分类:
.NET
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!