C#之清除已经注册的事件
private static void DealA(object sender, UnhandledExceptionEventArgs e)
{
Console.WriteLine($"Exception A Catches it!");
}
private static void DealB(object sender, UnhandledExceptionEventArgs e)
{
Console.WriteLine($"Exception B Catches it!");
}
static Delegate[] GetEventHandlers(object instance,string eventName)
{
var type = instance.GetType();
var eventField = type.GetField(eventName,BindingFlags.Instance|BindingFlags.NonPublic | BindingFlags.GetField);
if (eventField != null)
{
eventField.SetValue(instance,null);
}
return null;
}
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += DealA;
var a = GetEventHandlers(AppDomain.CurrentDomain, "_unhandledException");
AppDomain.CurrentDomain.UnhandledException += DealB;
Throw();
Console.WriteLine();
}

获取点击事件注册列表:
public static List<Delegate> GetClickEventHandlers(Button button)
{
List<Delegate> handlers = new List<Delegate>();
// 获取 ClickEvent 的 RoutedEvent 对象
var clickEvent = Button.ClickEvent;
// 获取 Button 的 EventHandlersStore
var eventHandlersStoreProperty = typeof(UIElement).GetProperty("EventHandlersStore", BindingFlags.Instance | BindingFlags.NonPublic);
var eventHandlersStore = eventHandlersStoreProperty?.GetValue(button);
if (eventHandlersStore != null)
{
// 获取 EventHandlersStore 中的 RoutedEventHandlers
var getRoutedEventHandlersMethod = eventHandlersStore.GetType().GetMethod("GetRoutedEventHandlers", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
var routedEventHandlers = getRoutedEventHandlersMethod?.Invoke(eventHandlersStore, new object[] { clickEvent }) as Array;
if (routedEventHandlers != null)
{
// 遍历 RoutedEventHandlers 并输出委托信息
foreach (var handler in routedEventHandlers)
{
var handlerInfo = handler.GetType().GetField("_handler", BindingFlags.Instance | BindingFlags.NonPublic);
var delegateInfo = handlerInfo?.GetValue(handler) as Delegate;
if (delegateInfo != null)
{
//Console.WriteLine($"Handler: {delegateInfo.Method.Name}");
handlers.Add(delegateInfo);
}
}
}
else
{
//Console.WriteLine("未找到 Click 事件的订阅者。");
}
}
else
{
//Console.WriteLine("无法访问 EventHandlersStore。");
}
return handlers;
}
C#之清除已经注册的事件的更多相关文章
- 菜鸟学JS(四)——javascript为按钮注册回车事件(设置默认按钮)
不得不说,在JS方面,自己真的是个不折不扣的菜鸟.对于JS以及一些JS框架如JQuery等JS框架,自己也只是处在简单应用的阶段,当然自己也在不断的学习当中,希望将来能跟大家分享更多JS方面的心得.今 ...
- 获取所有树叶子节点 注册添加事件 if ($(node).tree('isLeaf', node.target)) 是否叶子节点
//获取所有树叶子节点 注册添加事件 if ($(node).tree('isLeaf', node.target)) 是否叶子节点 $(function () { $('.easyui-tree') ...
- element-ui <el-input> 注册keyup事件,即键盘enter.
<template> <!-- 需求:keyup事件一般用在input中,在input框中输入内容,用户点击键盘的enter,执行搜索 --> <div class=&q ...
- element-ui <el-input> 注册blur事件
<template> <div class="demo"> <el-input placeholder="注册blur事件" v- ...
- 背水一战 Windows 10 (69) - 控件(控件基类): UIElement - Manipulate 手势处理, 路由事件的注册, 路由事件的冒泡, 命中测试的可见性
[源码下载] 背水一战 Windows 10 (69) - 控件(控件基类): UIElement - Manipulate 手势处理, 路由事件的注册, 路由事件的冒泡, 命中测试的可见性 作者:w ...
- Asp.Net 管道事件注册/HttpApplication事件注册
一.HttpApplication简介 在HttpRuntime创建了HttpContext对象之后,HttpRuntime将随后创建一个用于处理请求的对象,这个对象的类型为HttpApplicati ...
- ASP.Net 自定义HttpModule注册管道事件
背景: 一个请求在到达处理器时 可能需要做很多重复的工作 比如使用固定的算法推算出用户id 角色 如果在应用程序各处做重复解析 会产生大量代码冗余 还有能想到的诸如记录访问者 应用日志 统计流量 ...
- 一个事半功倍的c#方法 动态注册按钮事件
前几天在网上看见一个制作计算器的c#程序,其中有一个动态注册按钮事件,觉的很有用.于是实际操作了一哈, 确实比较好. 言归正传,下面就来讲讲怎样动态注册按钮事件. 首先,我们需要设置变量来获取点击一个 ...
- Asp.net自定义控件开发任我行(7)-注册自定义事件
摘要 前面我们已经把嵌入资源讲完了,不知道大家有没有得到收益,本章主要讲自定义事件,也就是给TextBox注册一个点击事件. 引言 不知道道上的朋友有没有注意到TextBox控件没有点击事件,就连网上 ...
- javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
今天遇到一个问题,那就是当使用for循环批量注册事件处理函数,然后最后通过事件处理函数获取当前元素的索引值的时候会失败,先看一段代码实例: <script type="text/jav ...
随机推荐
- webgpu学习问题,遇到了create graphics pipeline state failed错误
在学习webgpu并渲染图像时发生create graphics pipeline state failed with E_INVALIDARG (0x80070057)错误,图像无法成功渲染. ht ...
- Typecho添加一个当前页面加载完成速度时间
判断当前页面加载是否快速,通常是直接在浏览器中访问网站,看自己的直观感受是否快速.而客观的方法则是计算具体的页面加载时间并显示出来给看. 1.在当前主题的functions.php文件添加下面的代码: ...
- MybatisPlus - [01] 概述
MybatisPlus可以节省我们大量工作时间,所有的CURD代码它都可以自动化完成! 一.是什么 MyBatis-Plus(简称MP)是一个基于MyBatis的增强工具,其设计目的是在不改变My ...
- Zookeeper - 本地模式部署
本地模式部署 zoo.cfg 参数解析 本地模式部署 1.上传zookeeper的安装包并解压 tar -zxvf zookeeper-x.x.x.tar.gz -c /xxx/xxx/ 2.将 zo ...
- DeepSeek满血版测试
技术背景 很多厂商以次充好,用蒸馏版DeepSeek冒充满血版.本文提供一些收集的问题集,可以用于测试是否满血DeepSeek.经过实际测试,国内厂商中只有满血版DeepSeek可以全对.但是各厂商后 ...
- pytest 框架使用规则
使用pytest 注意 有时候常常会调用时文件未执行,就是没注意命名规范 如何调用-命令行调用 pytest 批量运行测试用例 单个用例调试成功后,接下来我们要进行所有脚本统一执行 我要执行testc ...
- SpringCloud带你走进微服务的世界
认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构.这些架构之间有怎样的差别呢? 单体架构 单体架构:将业务的所有功能集中在一个项目中开发,打 ...
- 大模型基础补全计划(二)---词嵌入(word embedding)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明 无 前言 本文是这个系列第二篇,它们是: &l ...
- k8s DCGM GPU采集指标项说明
dcgm-exporter 采集指标项 https://help.aliyun.com/document_detail/433222.html#section-oin-6mf-6j0 指标 解释 dc ...
- ASP.NET Core 静态资源的打包与压缩
以 Visual Studio Community 2017 15.5.1 为例 配置文件 bundleconfig.json 新建一个AspNetCore MVC项目,项目中会有一个bundleco ...