تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مقال- Custom EventHandler & Classes - الجزء الأول
#2
كاتب المشاركة : Islam Ibrahim

جزاك الله خيراً مهندس عمر,

لكن لي تعليقان:

أولاً: لا أرى ضرورة لعمل Disposing للـ EventHandler الخاص بالحدث الذي أضفناه وأعتقد أن هذه العملية لا تقع على عاتق ال Control أو Component الذي نعمل على بنائه , ولكن تقع على عاتق ال Form أو ال Container الذي يستضيف ال Control الخاص بنا فهو الذي سيقوم بعمل Subscribing لل EventHandler وهو من يفترض أن يقوم بعمل العملية العكسية وهي Unsubscribing .

والسبب أن ال EventHandler لا يخص الكلاس الخاص بنا وليس أحد ال Members الخاص به بل يخص كما قلت ال Container الخاص بالكلاس سواء كان Form أو غيره. وهذا ال Container هو الذي سيتولى هذه المهمة نيابة عنا.

ثانياً: فإنه ينصح بعمل Lock عند إضافة أو إزالة أو إطلاق أي Eventhandler وذلك حتى نتفادى أي تضارب عندما يتم بإضافة نفس الحدث أو إزالته في نفس الوقت من أكثر من مسار واحد Thread وجعل مسار واحد فقط هو الذي يطلق الحدث في حين تنتظر البقية حتى ينتهي المسار الحالي, كما يوضّح المثال التالي:


كود :
Public Class ComponentTest
Inherits System.ComponentModel.Component

Public Sub New()
End Sub

Dim PropertyChangedObject As New Object()

Private m_color As Color = Color.Transparent
Public Property MyColor() As Color
Get
Return m_color
End Get
Set(ByVal value As Color)
If value.IsEmpty Then
value = Color.Empty
End If
Me.m_color = value
Me.OnPropertyChanged(Me, EventArgs.Empty)
End Set
End Property

Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
Dim handler As EventHandler = CType(Me.Events("PropertyChangedEvent"), EventHandler)
If (handler IsNot Nothing) Then
handler = Nothing
End If
End If
MyBase.Dispose(disposing)

End Sub

Protected Overridable Sub OnPropertyChanged(ByVal sender As Object, ByVal e As System.EventArgs)
RaiseEvent PropertyChanged(sender, e)
End Sub

Public Custom Event PropertyChanged As EventHandler
AddHandler(ByVal value As EventHandler)
SyncLock PropertyChangedObject
Me.Events.AddHandler(PropertyChangedObject, value)
End SyncLock
End AddHandler

RemoveHandler(ByVal value As EventHandler)
SyncLock PropertyChangedObject
Me.Events.RemoveHandler(PropertyChangedObject, value)
End SyncLock
End RemoveHandler

RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
Dim handler As EventHandler = Nothing
SyncLock PropertyChangedObject
handler = CType(Me.Events(PropertyChangedObject), EventHandler))
End SyncLock
If handler IsNot Nothing Then
handler.Invoke(sender, e)
End If
End RaiseEvent
End Event

End Class
وفي هذه الحالة لابد من استخدام RaiseEvent بدلاً من الطريقة اليدوية.
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
مقال- Custom EventHandler & Classes - الجزء الأول - بواسطة Raggi Tech - 05-10-12, 11:46 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! أنس محمود 10 8,373 19-07-22, 12:15 AM
آخر رد: StartLight4000
  مقال: الكومبو بوكس ComboBox كيف تضيف أيقونات Blue Sky 1 3,448 30-06-19, 10:41 AM
آخر رد: invocker
  [درس فيديو] مثال بسيط لبرنامج إجازات فقط لأغراض الشرح (الدرس الأول) عبدالله الدوسري 7 12,084 28-04-18, 06:55 PM
آخر رد: moniam
  الفرق بين الأصناف Classes و الكائنات Objects RaggiTech 1 8,440 28-03-18, 10:30 PM
آخر رد: alsouf
  حساب قيمة معادلة(اقصد صيغة دون مجاهيل) مكتوبة بالتكست : الجزء الخامس والاخير محمد شريقي 4 4,826 23-02-18, 10:44 PM
آخر رد: العواد الصغير
  مقدمة إلي إخفاء المعلومات - الجزء الأول silverlight 5 4,501 07-01-17, 10:44 PM
آخر رد: Basil Abdallah
  مقدمة إلي إخفاء المعلومات - الجزء الثاني silverlight 1 3,209 06-01-17, 11:52 AM
آخر رد: silverlight
  تحويل الفيديو في برامجك-الجزء الثاني( إصلاح للمشاكل + تعديل للروابط + توضيح للأمر ) RaggiTech 1 3,506 10-12-14, 06:37 PM
آخر رد: abulayth
  الجزء الثاني من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج ( العمليات المتعددة)! أنس محمود 0 3,002 22-02-13, 12:39 AM
آخر رد: أنس محمود
  مقال- كيفية الاستغناء عن الداتا بيز التقليدية في برامجنا – ألجزء الأول RaggiTech 1 3,683 06-10-12, 12:23 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم