首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将代理从从未挂钩的事件中解除挂钩有什么问题吗?

将代理从从未挂钩的事件中解除挂钩有什么问题吗?
EN

Stack Overflow用户
提问于 2009-02-11 18:14:06
回答 3查看 1.6K关注 0票数 4

我使用的是C#下的标准windows窗体控件。

我有两个控件,它们是设置单个值的不同方式。因此,当其中一个发生更改时,changed事件处理程序会计算另一个的值并对其进行设置。因此,我需要暂时解除第二个控件上的change事件,以防止循环(A更改B,B更改,因此它更改A,A更改...)。还有一些其他情况,我需要停止更改事件。所以有几个地方我需要解除事件的挂钩,只有一个地方需要挂钩它。

我的问题是:我是否需要跟踪事件是否已经被挂钩,或者我是否可以像我喜欢的那样多次解除它的挂钩,只是偶尔再次挂钩它?(有没有解决这个问题的文档?)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-11 18:18:07

使用-=操作符解挂从未注册过的事件处理程序不会给您带来任何问题。

票数 5
EN

Stack Overflow用户

发布于 2009-02-11 18:17:41

是的,你可以想解挂多少次就解挂多少次,不会抛出异常。

票数 1
EN

Stack Overflow用户

发布于 2009-02-11 18:20:50

这将遍历和取消任何订阅的方法:

代码语言:javascript
复制
Delegate[] subscribers = myEvent.GetInvocationList();

    for(int i = 0; i < subscribers.Length; i++)

    {

    myEvent -= subscribers[i] as yourDelegateType;

    }

但是,我认为您应该能够通过编写单个处理程序来避免循环问题,该处理程序具有确定应该如何修改数据的逻辑。这样会更干净,更容易维护。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/538065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档