我正在使用C#下的标准Windows窗体控件。
我有两个控件,它们是设置单个值的不同方式。因此,当一个控件改变时,更改事件处理程序会计算另一个控件的值并设置它。因此,我需要暂时取消第二个控件上的更改事件以防止循环(A更改B,B被更改,因此它更改A,A被更改...)。还有其他一些情况,我需要停止更改事件。因此,有几个地方需要取消事件,并且只有一个地方需要连接它。
我的问题是:我需要跟踪事件是否已经连接,还是可以随意取消多次,并且只偶尔重新连接?(是否有任何文档解决这个问题?)
是的,您可以随时取消挂钩,不会抛出任何异常。
这将循环遍历并取消挂钩任何已订阅的方法:
Delegate[] subscribers = myEvent.GetInvocationList();
for(int i = 0; i < subscribers.Length; i++)
{
myEvent -= subscribers[i] as yourDelegateType;
}