Làm cách nào để bỏ qua các ngoại lệ bên trong trình xử lý sự kiện?

lập trình


Gần đây tôi phát hiện ra rằng Try…Catch cũng ghi lại các ngoại lệ bên trong các trình xử lý sự kiện mà tôi cảm thấy có sai sót. Đây là mã:

NỀN TẢNG
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

Những gì tôi đã thử:

Tìm kiếm trên mạng. Cũng đọc tài liệu.

Giải pháp 1

Sự kiện chỉ là lệnh gọi hàm mà bạn không kiểm soát thời điểm cuộc gọi diễn ra. Cuộc gọi và cụ thể hơn là địa chỉ trả về của cuộc gọi sẽ nằm trong ngăn xếp giống như bất kỳ lệnh gọi hàm nào khác.

Nếu bạn muốn biết chi tiết rõ ràng về cách xử lý ngoại lệ hoạt động, bạn sẽ cần biết về Xử lý ngoại lệ có cấu trúc của Windows (SEH), trong đó các ngoại lệ .NET được triển khai. Matt Pietrek đã viết những gì có lẽ là bản tóm tắt chính xác về SEH bên ngoài tài liệu của Microsoft. Bạn có thể tìm nó đây[^].

Sau khi bạn đọc xong, Chris Brumme có một bài viết rất hay về cách triển khai ngoại lệ .NET, đây[^].

Ồ, và để trả lời câu hỏi “Làm cách nào để bỏ qua các ngoại lệ trong trình xử lý sự kiện?”, bạn không thể.

コメント

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