我在C#下使用标准的Windows窗体控件。
我有两个控件,它们是设置单个值的不同方法。因此,当更改一个时,更改的事件处理程序计算另一个的值并设置它。因此我需要暂时取消第二个控件上的更改事件以防止循环(更改B,B更改以便更改A,A更改...)。还有一些其他情况我需要停止更改事件。所以有几个地方我需要解开事件,只有一个地方需要挂钩。
我的问题是:我是否需要跟踪事件是否已被挂钩,还是我可以根据自己的喜好多次取消它,并且偶尔会再次挂钩? (有没有解决这个问题的文件?)
答案 0 :(得分:5)
取消使用-=
运算符从未注册的事件处理程序不会给您带来任何问题。
答案 1 :(得分:1)
Ya,您可以根据需要多次取消挂钩,不会抛出任何异常。
答案 2 :(得分:1)
这将循环并取消挂起任何订阅的方法:
Delegate[] subscribers = myEvent.GetInvocationList();
for(int i = 0; i < subscribers.Length; i++)
{
myEvent -= subscribers[i] as yourDelegateType;
}
但是,我认为你应该能够通过编写一个带逻辑的处理程序来确定如何修改数据来避免循环问题。这将更清洁,更易于维护。