我的事件处理程序剥离器代码不起作用

时间:2012-03-05 10:28:32

标签: c# winforms webbrowser-control

我在堆栈溢出处找到了一个方法,它从给定的事件中去除所有事件处理程序。但是,当我将代码复制到我的程序中时,它给了我一个“引用未设置为实例”错误。

以下是相关代码:

        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的一个实例,此时已经实例化了。


编辑:提出了另一种删除处理程序的方法。

1 个答案:

答案 0 :(得分:2)

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