несколько делегатов, подключен и один отказывает - PullRequest
2 голосов
/ 08 мая 2009

У меня есть сценарий, в котором к событию прикреплено несколько делегатов (многоадресный делегат).

Какова может быть последовательность вызова этих методов / делегатов (если есть) ???

В случае, если один из методов, прикрепленных к делегату, генерирует исключение.

  1. Остановит ли событие дальнейшую обработку ... ???
  2. Будут ли продолжены все остальные методы ... ???

Мне не ясно, как с этим справиться.

Любая помощь высоко ценится.

Ответы [ 2 ]

4 голосов
/ 08 мая 2009

Да, обработчик события, который генерирует исключение, прекратит выполнение дальше, а исключение распространит стек вызовов. Это означает, что любые последующие обработчики событий не будут вызываться . Если вы хотите гарантировать, что каждый обработчик события вызывается в классе, который вызывает событие, то вам нужно будет выполнить итерации по каждому делегату в MulticastDelegate и вызывать его отдельно в блоке try-catch. Самым простым решением, конечно, является просто обнаружение любых возможных ошибок в ваших обработчиках, и я бы сказал, что в большинстве случаев это целесообразно.

0 голосов
/ 11 мая 2009

Методы в многоадресных делегатах вызываются в любом порядке. (Как правило, они вызываются в том порядке, в котором они были добавлены к делегату. Но это не всегда так.) Поэтому программисты не должны зависеть от порядка вызовов.

Необходимо перебрать все методы в делегате многоадресной рассылки с помощью делегата name.GetInvocationList () и использовать блок try catch внутри цикла, чтобы перехватить исключение и продолжить следующий вызов метода.

См. Эту статью о том, как можно убедиться, что остальные методы вызываются, несмотря на исключения в некоторых.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...