كيفية القيام بما يلي: الإعلان عن أحداث مخصصة لتجنب الحظر

هناك ظروف متعددة عندما يكون من المهم أن لا يمنع احد معالجات الحدث معالجات الحدث اللاحق. الـأحداث المخصصة تقوم بالسماح للحدث باستدعاء معالجات الأحداث الخاصة بها بشكل غير متزامن.

بشكل افتراضي, حقل مخزن النسخ لتعريف حدث هو تفويض إرسال متعدد الذي يضم بالتَّسَلْسُل كل معالجات الأحداث. وهذا يعني أنه إذا كان أحد المعالجات يأخذ وقتاً طويلاً للاكتمال، فانه يحظر المعالجات الأخرى حتى يكتمل. (معالجات الأحداث well-behaved يجب أن لا تنفذ عمليات حظر طويلة أو محتملة.)

بدلاً من استخدام التطبيق الافتراضي للأحداث التي يوفرها Visual Basic "، يمكنك استخدام حدث مخصص لتنفيذ معالجات الأحداث بشكل غير متزامن.

مثال

في هذا المثال، ملحق AddHandler يضيف التفويض لكل معالج من Click الحدث ل ArrayList مخزن في EventHandlerList الحقل.

عندما ترفع التعليمات البرمجية حدث Click، ملحق RaiseEvent يقوم بتنفيذ كل تفويضات معالج الحدث بشكل غير متزامن باستخدام أسلوب BeginInvoke. يقوم الأسلوب باستدعاء كل معالج على مؤشر ترابط العامل و يعود على الفور، حتى لا تحظرالمعالجات بعضها البعض.

Public NotInheritable Class ReliabilityOptimizedControl
    'Defines a list for storing the delegates
    Private EventHandlerList As New ArrayList

    'Defines the Click event using the custom event syntax.
    'The RaiseEvent always invokes the delegates asynchronously
    Public Custom Event Click As EventHandler
        AddHandler(ByVal value As EventHandler)
            EventHandlerList.Add(value)
        End AddHandler
        RemoveHandler(ByVal value As EventHandler)
            EventHandlerList.Remove(value)
        End RemoveHandler
        RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
            For Each handler As EventHandler In EventHandlerList
                If handler IsNot Nothing Then
                    handler.BeginInvoke(sender, e, Nothing, Nothing)
                End If
            Next
        End RaiseEvent
    End Event
End Class

راجع أيضًا:

المهام

كيفية القيام بما يلي: إعلان عن أحداث العادية لحفظ الذاكرة

المرجع

ArrayList

BeginInvoke

موارد أخرى

الـأحداث (Visual Basic)