C#:创建一个事件,每当另一个具有监听器的事件被触发时,该事件就会被触发,也许可以通过反射动态地触发?

标签 c# events reflection capture subscribe

这是我正在处理的内容:

我的项目的一部分是一个 Windows 窗体应用程序。我想基本上捕获每个触发并有听众的事件。所以一些按钮的单击事件,一些复选框的检查事件,基本“控制”事件列表上的所有内容。所以该事件仍然会触发,但也会触发我的事件。

是否有一个通用的“某些事件触发”事件可以利用,或者有没有一种方法使用反射来枚举表单中的所有对象,解析出所有事件,解析哪些事件有监听器,然后除了他们已经要去的地方之外,还要为他们所有人订阅其他地方的通用事件吗?

有人知道怎么做吗?

最佳答案

你从根本上不能这样做:事件是一个只有“订阅”和“取消订阅”功能的黑盒子。因此,虽然您可以使用反射来找出所有事件,但您无法可靠地检测哪些事件已被订阅。对于类似字段的事件,您可以获取支持字段并检查它是否为空,但即使这样也不可靠 - 为了避免空检查,作者可能编写了如下内容:

public event EventHandler SomeEvent = delegate {};

对于其他事件,您必须弄清楚订阅该事件的实际用途 - 例如,它可能使用 EventHandlerList .

基本上,您应该重新考虑您的设计,这样就不需要这样做。

关于C#:创建一个事件,每当另一个具有监听器的事件被触发时,该事件就会被触发,也许可以通过反射动态地触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3686258/

相关文章:

c# - NHibernate SysCache2 和查询缓存 - 无法避免 Select N+1?

c# - 如何在没有 lambda 的情况下使用 linq 扩展?

javascript - contentEditable span - PreventDefault 不起作用

c# datagridview 使用 FullRowSelect 双击行

reflection - 在 Go 中使用反射创建指针 slice

java - 如何在java中获取类似 `MyClass<String>.class`的内容

c# - 在 QuickGraph 中创建无向图并使用 BFS 遍历它

C++ 事件处理

c# - 如何在运行时从 NUnit 测试运行中获取单元测试方法属性?

C# - AES 解密问题 - 总是为空