【解決方法】イベントハンドラー内の例外を無視するにはどうすればよいですか?


最近、Try…Catch がイベント ハンドラー内の例外もキャプチャすることを発見しましたが、これは間違っていると感じます。 コードは次のとおりです。

ベーシック
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

私が試したこと:

ウェブを検索します。 ドキュメントもお読みください。

解決策 1

イベントは単なる関数呼び出しであり、呼び出しがいつ発生するかを制御することはできません。 呼び出し、より具体的には、呼び出しの戻りアドレスは、他の関数呼び出しと同様にスタック上に置かれます。

例外処理の仕組みについて詳細に知りたい場合は、.NET 例外が実装されている Windows 構造化例外処理 (SEH) について知っておく必要があります。 Matt Pietrek は、Microsoft ドキュメント以外に、おそらく SEH に関する決定的な入門書と思われる内容を書きました。 見つけられますよ ここ[^]。

これを読んだ後は、Chris Brumme が .NET 例外の実装について非常に優れた記事を書いています。 ここ[^]。

ああ、「イベント ハンドラー内で例外を無視するにはどうすればよいですか?」という質問に答えると、それはできません。

コメント

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