当前位置:  开发笔记 > 编程语言 > 正文

如何取消订阅C#中特定类的事件的所有处理程序?

如何解决《如何取消订阅C#中特定类的事件的所有处理程序?》经验,为你挑选了1个好方法。



1> Charles Bret..:

每个委托都有一个名为的方法GetInvocationList(),它返回已注册的所有实际委托.因此,假设委托类型(或事件)名为say MyDelegate,并且处理程序实例变量已命名myDlgHandler,您可以编写:

Delegate[] clientList = myDlgHandler.GetInvocationList();
foreach (var d in clientList)
       myDlgHandler -= (d as MyDelegate);

覆盖它可能为null的情况,

 if(myDlgHandler != null)
  foreach (var d in myDlgHandler.GetInvocationList())
       myDlgHandler -= (d as MyDelegate);


您可能还想检查myDlgHandler!= null
_"你想要的任何标准"_ - 你错过了重点.您要求获益,但不要证明.无论你有什么标准,你所给出的例子都不会以任何方式加强对这些代表的删除.随意演示,但无论你提出什么样的演示,都会有一个更简单的版本,不涉及调用`GetInvocationList()`._"不,它不会,它将是一个空委托"_ - "空委托"是"null".试试吧.
最新的表单实际上可能会崩溃.如果`myDlgHandler`为null,则`foreach`将计算为`foreach(var d in null)`,这将抛出`NullReferenceException`.
推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有