Удаленное событие, но все еще стреляющее
У меня странная ошибка, когда запускается нежелательное событие. Я могу проследить в код и увидеть, что обработчик события "onRowLeave" удаляется с использованием синтаксиса -=, а затем изменяется следующая строка DataSource, что приводит к срабатыванию обработчика "OnRowLeave"!
Так что, кажется, удаление не работает.
Я могу сказать, что это не добавляется снова как-то, потому что у меня есть точка останова во всех местах, где она добавляется с помощью +=, и она не затрагивает их.
Я думаю, что, может быть, он добавляется дважды и удаляется только один раз... это будет причиной? Есть ли способ увидеть обработчики в отладчике?
2 ответа
->> Я думаю, что, может быть, он добавляется дважды и удаляется только один раз... это будет причиной?
Это правильно.
->> Есть ли способ увидеть обработчики в отладчике?
Я не думаю, что это возможно. Кроме того, если вы не знаете, сколько раз был добавлен обработчик событий, их снятие не является простой задачей. Я полагаю, что вы можете использовать отражение, чтобы достичь этого.
Вместо этого я бы порекомендовал вам изучить код и понять, где и почему у вас есть несколько регистраций событий, чтобы вы могли удалить их вручную, если это будет необходимо.
(Возможно, вы захотите отметить (как предложено nobugz), что OnRowLeave является методом DataGridView и не является событием. Этот метод не предоставляется пользователю, а вместо этого отвечает за возникновение события RowLeave, которое пользователь может перехватить. Я не совсем уверен, почему вы используете термин OnRowLeave)
Когда у меня возникают подобные проблемы с обработчиком событий, я обычно предоставляю свои собственные методы добавления / удаления событий и отслеживаю обработчики событий в своем собственном контейнере вместе с другими отладочными данными, если это кажется полезным. Это позволяет проверить коллекцию в отладчике, и дополнительные данные могут быть весьма полезны, если они связывают объект System.Diagnostics.StackTrace для каждого события, добавляемого таким образом.