سؤال

لقد تساءلت في كثير من الأحيان عن ذلك ، لكن الآن واجهت جزءًا من المنطق الذي يتضمنه ، اعتقدت أنه يجب علي المضي قدمًا والحصول على بعض المساعدة في فك تشفير الأساسيات. المشكلة على النحو التالي ، أنا أبحث في تطبيق WPF يستخدم مكتبة التطبيق المركبة. ضمن مصدر التطبيق ، صادفت السطر التالي من التعليمات البرمجية في عرض العرض. من أجل المقاومة ، سأسميها العرض التقديمي أ:

private void OnSomethingChanged(SomeArgumentType arguement)
{
   UnityImplementation.EventAggregator.GetEvent<EventA>().Publish(null);
}

عندما رأيت الطريقة التي تنشر في الطريقة المذكورة أعلاه ، أخبرتني أمعائي أنه يجب أن يكون هناك اشتراك في مكان ما وفي فصل آخر ، سأطلق عليه العرض التقديمي ب كان هناك ما يلي:

UnityImplementation.EventAggregator.GetEvent(Of EventA).Subscribe(AddressOf OnSomeEventA)

كانت هناك وظيفة خاصة في نفس الفئة تسمى OnsomeEventa التي كانت لها بعض المنطق.

سؤالي هنا هو كيف يتم توصيل كل شيء هنا؟ ما الذي تحققت بالضبط من خلال "نشر" "الاشتراك" هنا؟ عندما يتغير "شيء ما" ، كيف يعرف المترجم أنه يجب أن يتبع المنطق في onSomethingChanged الذي سيقوم "بنشر" حدث "مشترك" من قبل فئة أخرى حيث تم وصف منطق معالج الأحداث؟ سيكون من الرائع فهم الأسلاك الأساسية لهذه العملية.

شكرًا

هل كانت مفيدة؟

المحلول

المرة الأولى GetEvent<T> يتم استدعاؤه لكل حدث (تم تحديده بواسطة المعلمة النوع T) ال EventAggregator ينشئ قائمة فارغة من الطرق للاتصال عند نشر هذا الحدث. عادة ، سيحدث هذا مباشرة قبل المكالمة الأولى إلى Publish أو Subscribe (كما في الأمثلة الخاصة بك).

ثم:

  • كلما Subscribe يسمى طريقة يضاف إلى القائمة.
  • كلما Publish يطلق عليه يسير عبر القائمة ويجري تلك المكالمات.

لذلك ، الدعوة إلى Publish() في العرض التقديمي النتائج في جميع الطرق التي تم تسجيلها عن طريق الاتصال Subscribe أن يتم استدعاؤه ، والذي يتضمن في مثالك العرض التقديمي ب OnSomeEventA طريقة.

حاول تعيين نقطة توقف في OnSomeEventA الطريقة وإلقاء نظرة على المكدس ، ولا تنسى أن المصدر متاح أيضًا!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top