Вопрос по reflection, c# – Решение удалить обработчик событий динамически (используя отражение). Есть лучший способ сделать это?

2

Мне нужно было удалить обработчики событий из элемента управления, загруженного из библиотеки DLL, для которой у меня нет кода. Поскольку, по-видимому, он не является "официальным" (то есть поддерживается публичными методами .NET Framework), я смог создать пару методов расширения, которые сделали именно это с помощью Reflection.

Смотрите этот блог для всех деталей:Удаление события из элемента управления WinForm ListView с помощью отражения

Вот пример кода того, как удалить событие SelectedIndexChanged (динамически и без доступа к исходному обработчику)

//for a UserControl (in fact any control that implements System.ComponentModel.Component)
var userControl = new UserControl();
//we can get the current mapped event handlers
userControl.eventHandlers();
//its signature
userControl.eventHandlers_MethodSignatures();
//remove one by using the static field name
userControl.remove_EventHandler("EVENT_SELECTEDINDEXCHANGED");
//or use this one specifically mapped to the SelectedIndexChanged event
userControl.remove_Event_SelectedIndexChanged

У меня вопрос: "Есть ли другой способ?"

Хотя мое решение работает и кажется стабильным, я делаю внутренние манипуляции с объектами .NET, так что, может быть, есть лучшее решение (в 4.0 или 4.5)?

Похожие сообщения:

How would that be possible to remove all event handlers of the Click event of a Button? - uses a similar solution to mine, but I don't think their solution works
Если вы не знаете, что делают обработчики событий, следует ли их отсоединять? Jodrell
В этом случае я точно знал, что делают обработчики событий (и тот факт, что они были основной причиной исключения .NET, которое может произойти при выборе элемента ListView). Dinis Cruz

Ваш Ответ

0   ответов

Похожие вопросы