在我的 .NET 应用程序中,我订阅了另一个类的事件。认购是有条件的。当控件可见时我订阅事件,当控件不可见时取消订阅它。但是,在某些情况下,即使控件不可见,我也不想取消订阅该事件,因为我想要后台线程上发生的操作的结果。
有没有办法可以确定一个类是否已经订阅了该事件?
我知道我们可以在课堂上做到这一点,这将通过检查事件来引发该事件null
,但是我如何在订阅该事件的类中执行此操作?
The event
明确发明关键字是为了阻止您做您想做的事情。它限制了对底层的访问delegate
对象,因此没有人可以直接弄乱它存储的事件处理程序订阅。活动有访问器对于委托来说,就像属性是字段的访问器一样。属性只允许获取和设置,事件只允许添加和删除。
这可以保证您的代码安全,其他代码只有在知道事件处理程序方法和目标对象的情况下才能删除事件处理程序。 C# 语言不允许您命名目标对象,从而设置了额外的安全层。
WinForms 放置了额外的安全层,因此即使您使用反射也会变得很困难。它存储delegate
中的实例EventHandlerList
使用秘密“cookie”作为密钥,您必须知道 cookie 才能从列表中挖掘对象。
好吧,别去那里。用你的一些代码来解决你的问题是微不足道的:
private bool mSubscribed;
private void Subscribe(bool enabled)
{
if (!enabled) textBox1.VisibleChanged -= textBox1_VisibleChanged;
else if (!mSubscribed) textBox1.VisibleChanged += textBox1_VisibleChanged;
mSubscribed = enabled;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)