Мой код стриппера обработчика событий не работает - PullRequest
0 голосов
/ 05 марта 2012

Я нашел здесь метод переполнения стека, который удаляет все обработчики событий из данного события. Однако, когда я скопировал код в свою программу, он выдал ошибку «Ссылка не установлена ​​на экземпляр».

Вот код вопроса:

        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 Ответ

2 голосов
/ 05 марта 2012

DocumentCompleted является открытым событием, а не частным статическим полем, поэтому f1 имеет значение null и вызывает вашу ошибку

...