我的事件处理程序剥离器代码是';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的一个实例,此时它已被实例化。
编辑:想出了一种不同的方法来删除处理程序。
DocumentCompleted是一个公共事件,而不是一个私有静态字段,因此f1为null并导致错误