这是我正在处理的内容:
我的项目的一部分是一个 Windows 窗体应用程序。我想基本上捕获每个触发并有听众的事件。所以一些按钮的单击事件,一些复选框的检查事件,基本“控制”事件列表上的所有内容。所以该事件仍然会触发,但也会触发我的事件。
是否有一个通用的“某些事件触发”事件可以利用,或者有没有一种方法使用反射来枚举表单中的所有对象,解析出所有事件,解析哪些事件有监听器,然后除了他们已经要去的地方之外,还要为他们所有人订阅其他地方的通用事件吗?
有人知道怎么做吗?
最佳答案
你从根本上不能这样做:事件是一个只有“订阅”和“取消订阅”功能的黑盒子。因此,虽然您可以使用反射来找出所有事件,但您无法可靠地检测哪些事件已被订阅。对于类似字段的事件,您可以获取支持字段并检查它是否为空,但即使这样也不可靠 - 为了避免空检查,作者可能编写了如下内容:
public event EventHandler SomeEvent = delegate {};
对于其他事件,您必须弄清楚订阅该事件的实际用途 - 例如,它可能使用 EventHandlerList
.
基本上,您应该重新考虑您的设计,这样就不需要这样做。
关于C#:创建一个事件,每当另一个具有监听器的事件被触发时,该事件就会被触发,也许可以通过反射动态地触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3686258/