كيفية تجاهل الاستثناءات داخل معالجات الأحداث؟


لقد اكتشفت مؤخرًا أن 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

الحدث هو مجرد استدعاء دالة حيث لا يمكنك التحكم في وقت حدوث المكالمة. يتم إرسال المكالمة، وبشكل أكثر تحديدًا، عنوان المرسل للمكالمة إلى المكدس تمامًا مثل أي استدعاء دالة آخر.

إذا كنت تريد الحصول على تفاصيل دقيقة حول كيفية عمل معالجة الاستثناءات، فسوف تحتاج إلى معرفة كيفية معالجة الاستثناءات الهيكلية لـ Windows (SEH)، والتي يتم فيها تنفيذ استثناءات .NET. كتب Matt Pietrek ما هو على الأرجح الكتاب التمهيدي النهائي لـ SEH خارج وثائق Microsoft. يمكن ان تجدها هنا[^].

بمجرد قراءتك لذلك، سيكون لدى كريس بروم مقالة جيدة حقًا حول تنفيذ استثناءات .NET، هنا[^].

أوه، وللإجابة على السؤال “كيفية تجاهل الاستثناءات داخل معالجات الأحداث؟”، لا يمكنك ذلك.

コメント

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