¿Cómo ignorar las excepciones dentro de los controladores de eventos?

programación


Recientemente descubrí que Try…Catch también captura excepciones dentro de los controladores de eventos, lo que parece incorrecto. Aquí está el código:

BÁSICO
Module Module1
Event ExEvent()

Sub Main()
  AddHandler ExEvent, AddressOf ExEventHandler
  Try
   REM Exception from event handler propagates here
   RaiseEvent ExEvent()
  Catch ex As Exception
   Console.WriteLine(ex.Message)
  End Try

  Console.ReadKey()
End Sub

Private Sub ExEventHandler()
 Throw New NotImplementedException
End Sub

End Module

Lo que he probado:

Busca en la web. Lea también la documentación.

Solución 1

Un evento es solo una llamada a una función donde no controlas cuándo ocurre la llamada. La llamada, y más específicamente, la dirección del remitente de la llamada, va a la pila como cualquier otra llamada a función.

Si desea obtener detalles concretos sobre cómo funciona el manejo de excepciones, necesitará conocer el manejo estructurado de excepciones (SEH) de Windows, en el que se implementan las excepciones .NET. Matt Pietrek escribió lo que probablemente sea el manual definitivo sobre SEH fuera de la documentación de Microsoft. Puedes encontrarlo aquí[^].

Una vez que haya leído eso, Chris Brumme tiene un muy buen artículo sobre la implementación de excepciones de .NET. aquí[^].

Ah, y para responder a la pregunta “¿Cómo ignorar las excepciones dentro de los controladores de eventos?”, no puedes.

コメント

タイトルとURLをコピーしました