我的事件处理程序剥离器代码是';t工作

本文关键字:工作 代码 事件处理 程序 剥离 我的 | 更新日期: 2023-09-27 18:26:58

我在这里找到了一个关于堆栈溢出的方法,该方法从给定事件中剥离所有事件处理程序。然而,当我将代码复制到程序中时,它给了我一个"引用未设置为实例"的错误。

这是有问题的代码:

        FieldInfo f1 = typeof(Control).GetField("DocumentCompleted",
        BindingFlags.Static | BindingFlags.NonPublic);
        object obj = f1.GetValue(browser);
        PropertyInfo pi = browser.GetType().GetProperty("Events",
        BindingFlags.NonPublic | BindingFlags.Instance);
        EventHandlerList list = (EventHandlerList)pi.GetValue(browser, null);
        list.RemoveHandler(obj, list[obj]);

错误发生在以下行:

object obj = f1.GetValue(browser);

浏览器对象是WebBrowser的一个实例,此时它已被实例化。


编辑:想出了一种不同的方法来删除处理程序。

我的事件处理程序剥离器代码是';t工作

DocumentCompleted是一个公共事件,而不是一个私有静态字段,因此f1为null并导致错误