我在堆栈溢出处找到了一个方法,它从给定的事件中去除所有事件处理程序。但是,当我将代码复制到我的程序中时,它给了我一个“引用未设置为实例”错误。
以下是相关代码:
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的一个实例,此时已经实例化了。
编辑:提出了另一种删除处理程序的方法。
答案 0 :(得分:2)
DocumentCompleted是一个公共事件,而不是私有静态字段,因此f1为null并导致您的错误