我使用的是C#下的标准windows窗体控件。
我有两个控件,它们是设置单个值的不同方式。因此,当其中一个发生更改时,changed事件处理程序会计算另一个的值并对其进行设置。因此,我需要暂时解除第二个控件上的change事件,以防止循环(A更改B,B更改,因此它更改A,A更改...)。还有一些其他情况,我需要停止更改事件。所以有几个地方我需要解除事件的挂钩,只有一个地方需要挂钩它。
我的问题是:我是否需要跟踪事件是否已经被挂钩,或者我是否可以像我喜欢的那样多次解除它的挂钩,只是偶尔再次挂钩它?(有没有解决这个问题的文档?)
发布于 2009-02-11 18:18:07
使用-=操作符解挂从未注册过的事件处理程序不会给您带来任何问题。
发布于 2009-02-11 18:17:41
是的,你可以想解挂多少次就解挂多少次,不会抛出异常。
发布于 2009-02-11 18:20:50
这将遍历和取消任何订阅的方法:
Delegate[] subscribers = myEvent.GetInvocationList();
for(int i = 0; i < subscribers.Length; i++)
{
myEvent -= subscribers[i] as yourDelegateType;
}但是,我认为您应该能够通过编写单个处理程序来避免循环问题,该处理程序具有确定应该如何修改数据的逻辑。这样会更干净,更容易维护。
https://stackoverflow.com/questions/538065
复制相似问题