05-10-12, 11:46 AM
كاتب المشاركة : silverlight
أخي الفاضل إسلامالأسلوب الذي تفضلت باستخدامه في مثالك أسلوب كانت مايكروسوفت تعتمده قديما في الكلاسات الخاصة بها وبما انهم كانوا يقومون بتعريف Delegate علي أنه Object لذلك ومن المؤكد انهم كانوا يحتاجون الي استخدام SyncLock التي تعمل هنا كغلاف لأي Handler حتي يتم تنفيذه وحتي لا يحدث Blocking بين Handlers المختلفة
والسبب في ذلك هو التأكد من أن أي Handler يتم تنفيذه عليه أن ينتظر ما قبله من Delegates حتي يبدا هو في تنفيذ مهامه وهنا تأتي أهمية جملة SyncLock لأنها ستضمن تنفيذ Handler كاملا وبالتالي لا يحدث تداخل أو Blocking بين Delegates المختلفة
أما بالنسبة للفارق بين Custom EventHandler وبين الأسلوب القديم وهو تعريف Delegates علي أنها Objects اسمح لي أن اوضح الأمر بفكرة بسيطة جدا
تخيل أن هناك عائلة من أب و أم ولديهم حوالة 10 أبناء أو اكثر وتخيل أن جميع أبنائهم يحملون نفس الاسم فعندما يقوم أي من الأب أو الأم بمناداة اي من ابنائهم فبالتأكيد سيحدث نوع من الخلط لأن الأبناء لن يعلمون حينها علي من تحديدا ينادي الأب أو الأم وهنا ما سيحدث هو إما ان يذهب الأبناء جميعا لتلبية نداء الأبوين أو أحدهم او بعضهم
وعندما نقوم بتعريق Delegate جميعها علي أنها Objects يصبح الأمر مثل العائلة التي يحمل أولادهم جميعا نفس الإسم ولذلك نحتاج الي استخدام SyncLock
أما عندما نقوم باستخدام Custom EventHandler أو Custom Delegates فهنا نحن نحرص علي أن يكون كل منهم له اسم مختلف عن الأخر وهذا سيؤدي الي سهولة عمل كل منهم علي حدة وبالتالي لا ينتظرون بعضهم البعض لتنفيذ مهامهم المختلفة
وفي الحالتين والمقصد هنا أنه في حالة استخدام الاسلوب القديم وهو تعريف Delegates علي أنها Objects أو استخدام الأسلوب الأحدث قليلا الأ وهو استخدام Custom EventHandler هنا تأتي أهمية عمل Dispose لهذه EventHandler فالهدف هنا هو المساعدة علي تحرير ذاكرة الكمبيوتر وبالتالي أنت تساعد الكلاس GC علي تنفيذ مهامه بشكل أفضل
عموما الأمثلة التي سوف أضعها لاحقا ربما ستفسر الأمر بشكل أفضل
تقبل تحياتي
أخوك عمر
