如何取消注册表单事件的所有处理程序?

Jos*_*hua 2 c# handler

我有2个处理程序使用相同的表单.如何在添加新处理程序(C#)之前删除处理程序?

Fly*_*wat 10

如果您在表单中工作,您应该可以执行以下操作:

伪代码:

Delegate[] events = Form1.SomeEvent.GetInvokationList();

foreach (Delegate d in events)
{
     Form1.SomeEvent -= d;
}
Run Code Online (Sandbox Code Playgroud)

从表单的外部,你的SOL.

  • 我已经有了对变量的访问权限,只需将其设置为null - 无需通过调用列表... (6认同)

Jon*_*eet 7

如果你知道那些处理程序是什么,只需按照订阅它们的方式删除它们,除了 - =而不是+ =.

如果你不知道处理程序是什么,你就无法删除它们 - 这个想法是事件封装阻止了一个感兴趣的一方在观察一个事件时破坏了另一个类的兴趣.

编辑:我一直在假设您正在谈论由不同的类实现的事件,例如控件.如果您的类"拥有"该事件,则只需将相关变量设置为null.