Подтвердить что ты не робот

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

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

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

Вот пример кода, как удалить событие 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)?

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

4b9b3361