2009-05-08 5 views
2

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

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

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

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

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

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

ответ

3

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

0

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

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

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

Смежные вопросы