У меня проблема с asp.net и сторонним элементом управления, встроенным в пользовательский элемент управления. Я хочу назначить обработчик событий одному из событий стороннего элемента управления. Это разрешает назначение, но обработчик событий никогда не трогается. Я считаю, что либо нарушаю назначение обработчика событий, либо назначаю его не в то время. Я хочу отслеживать назначение обработчика событий через отладку. Как я могу проверить, какие обработчики событий назначены элементу управления в отладке?

0
24 Июн 2009 в 00:52

2 ответа

Если у вас есть исходный код пользовательского элемента управления, вы можете добавить код ведения журнала в добавить/удалить аксессоры для события.

В отладчике VS вы также можете проверить содержимое поля _invocationList в событии (базовый класс MulticastDelegate). Развернув его, вы увидите список подключенных обработчиков.

2
Groo 24 Июн 2009 в 01:03
К сожалению, у меня нет исходника.
 – 
Anonymous
26 Июн 2009 в 00:31

Используя окно Watch (или Locals или Autos) в Visual Studio, вы можете копаться в делегате, содержащем событие (при условии, что это стандартное событие), и посмотреть, какие методы он содержит.

РЕДАКТИРОВАТЬ:

Если у события есть только один обработчик, вы увидите его в base.base.Method в поле делегата. Если у него несколько обработчиков, base._invocationList будет массивом делегатов одного метода; вы можете проверить base.base.Method в каждом из них.

Если _invocationList делегата не равен нулю, его base.base.Method будет игнорироваться.

1
SLaks 26 Июн 2009 в 00:57