Algunas de las respuestas aquí sugieren que es malo tirar desde un controlador de eventos ("crea estragos para quien llama", "tiende a provocar situaciones muy difíciles de manejar y comportamientos inesperados", ...).
En mi humilde opinión esto no tiene sentido.
En el caso general, está perfectamente bien lanzar desde un controlador de eventos. No se ejecutarán otros manejadores de eventos, por supuesto, ni el controlador de eventos que arroja la ejecución hasta el final, ni ningún otro código entre el disparo del evento y el punto donde se detecta. ¿Y qué? Es perfectamente normal que el código no se ejecute cuando se lanza una excepción: si necesita garantizar que se ejecuta, entonces use un bloque finally.
Por supuesto, en cualquier caso específico es posible que desee considerar las excepciones, si las hay, que es apropiado manejar, al igual que con cualquier otro código.
Como siempre, no existen reglas estrictas que se apliquen en todas las circunstancias. Una de las respuestas aquí dice "los controladores de eventos deben ser rápidos ... y cerca de la ausencia de errores ...". Un contraejemplo es el evento ASP.NET Page.Load.
Una regla general en .NET es que casi siempre es una mala idea tragarse todas las excepciones: esto se aplica a los manejadores de eventos al igual que a cualquier otro código.
Así que la respuesta a la pregunta original "hay nunca ninguna circunstancia en la que es aceptable para un método responsable de escuchar a un evento para lanzar una excepción" es muy definitivamente sí.
Al igual que la respuesta a la pregunta "¿hay alguna circunstancia en la que sea aceptable que un método responsable de escuchar un evento trague excepciones" también es afirmativa.
También están los CancelEventArgs. http://msdn.microsoft.com/en-us/library/system.componentmodel.canceleventargs.aspx – simendsjo
No entiendo lo que quiere decir, aquí. ¿Quieres decir en el lado de recibir de decir Button1_Click, quieres lanzar una excepción? –
@Rob: supongamos que tiene un proceso de ejecución larga con un evento finalizado. 10 métodos se registran con esto. Si uno de ellos lanza una excepción, no se llamará al resto. – simendsjo