zoukankan      html  css  js  c++  java
  • 清除一个对象所有事件所挂钩的delegate

    using System.Reflection; //需在添加 这个引用
     
    /// <summary> 
             
    /// 清除一个对象所有事件所挂钩的delegate 
             
    /// </summary> 
             
    /// <param>有事件的对象</param> 
             public static void ClearAllEvents(object objectHasEvents) 
             { 
                 if (objectHasEvents == null
                 { 
                     return
                 } 
                 EventInfo[] events = objectHasEvents.GetType().GetEvents( 
                     BindingFlags.Public | 
                     BindingFlags.NonPublic | 
                     BindingFlags.Instance); 
                 if (events == null || events.Length < 1
                 { 
                     return
                 } 
                 for (int i = 0; i < events.Length; i++) 
                 { 
                     try 
                     { 
                         EventInfo ei = events[i]; 
                         /******************************************************** 
                          * class的每个event都对应了一个同名的private的delegate类 
                          * 型成员变量(这点可以用Reflector证实)。因为private成 
                          * 员变量无法在基类中进行修改,所以为了能够拿到base 
                          * class中声明的事件,要从EventInfo的DeclaringType来获取 
                          * event对应的成员变量的FieldInfo并进行修改 
                          *******************************************************
    */ 
                         FieldInfo fi = 
                             ei.DeclaringType.GetField(ei.Name, 
                                                       BindingFlags.NonPublic | 
                                                       BindingFlags.Instance); 
                         if (fi != null
                         { 
                             // 将event对应的字段设置成null即可清除所有挂钩在该event上的delegate 
                             fi.SetValue(objectHasEvents, null); 
                         } 
                     } 
                     catch 
                     { 
                     } 
                 } 
             }
  • 相关阅读:
    在python中添加自定义模块
    jquery图片延时加载
    java的内部类与匿名类
    Oracle数据库优化器的优化方式
    JS实现画线(兼容所有浏览器)
    Ext中window的用法
    关于工作流WEB设计器的一些问题
    ORACLE EBS 价目表的导入功能存储过程BUG
    EXT编程实现人员信息的添加
    用户交互式垃圾回收机制
  • 原文地址:https://www.cnblogs.com/lujin49/p/2364187.html
Copyright © 2011-2022 走看看