سؤال

تخيل عبر منصة مكتبة لإنشاء ويندوز الخاص دون الاعتماد على WinForms/GTK#/WPF/MonoMac/الخ (هذا هو OpenTK في حالة أي شخص مهتم).

هنا هو التعامل:ويندوز X11-قادرة على Unices الدعم (أو يمكن أن تعمل مع) متعددة الحدث حلقات, واحد على كل موضوع.وهذا يعني أن (أ) يمكنك إنشاء نافذة واحدة في الموضوع ويكون لهم العمل بشكل مستقل و (ب) يمكنك تشغيل WinForms (أو GTK#, WPF, ...) نافذة على موضوع واحد فتح OpenTK نافذة على مختلف دون تدخل.

الآن أفضل من المسلم محدودة - المعرفة الكربون لا يدعم هذا.نظام التشغيل الأحداث فقط تسليمها إلى "الرئيسية" حلقة الحدث وجميع الثانوية المواضيع تعمل على أبخرة (وهذا هو ، ReceiveNextEvent يعود دائما eventLoopTimedOutErr و لا تجد أي الأحداث).OpenTK نفسها يمكن أن تعمل مع هذا القيد ، لا مشكلة ، ولكن هذا يطرح مشكلة مثيرة للاهتمام إلى التطبيقات التي تحاول خلط OpenTK مع مختلف أدوات (على سبيل المثالMonoMac) لعرض نافذة التكوين.

اثنين من الخيارات:

  • التخلي عن فكرة مجنونة و عدم السماح خلط OpenTK مع مختلف الأدوات (سيئة).
  • اختيار فأس المعركة و هاك الكربون في تقديم (جيد).

هنا كنت تأتي في:هل يمكنك التفكير في أي طريقة لجعل هذا العمل ؟ تخيل السيناريو التالي:

  1. الموضوع #1 (الرئيسي) يعمل بعض رمز التهيئة من اختيارنا و يولد الثانية موضوع (يمكننا تعديل هذا بحرية).
  2. الموضوع #1 (الرئيسي) يفتح الأصلية نافذة يدير رائيل حلقة (RunApplicationEventLoop).فإنه يخرج من سيطرتنا المباشرة ، على الرغم من أننا يمكن أن لا تزال تثبيت توقيت لتشغيل التعليمات البرمجية لدينا ، إذا لزم الأمر.
  3. موضوع #2 (الثانوية) يفتح OpenTK نافذة على الفور تعليق (الأحداث فقط سلمت على الموضوع #1 و ReceiveNextEvent لا يحصل على شيء).

هل من الممكن تصفية الأحداث من الموضوع #1 وتسليمها إلى الموضوع رقم 2 كما ضروري ؟ أن را تساعد بطريقة أو بأخرى هنا ؟ معلمو نظام التشغيل Mac OS X, الرجاء المساعدة!

(لغة البرمجة لا يهم استخدام أي شيء كنت معتادا.تفضل الكربون القائم على حل ولكن الكاكاو تعمل على ما يرام.)

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

المحلول

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

نصائح أخرى

نلقي نظرة على التطبيق.AddMessageFilter و IMessageFilter واجهة.لك قد تكون قادرة على اعتراض الرسائل إلى استخدام منطق العرف.لقد استخدمت هذه التقنية في الماضي (الماضي البعيد جدا), ولكن كان ذلك منذ فترة طويلة أنني لا أتذكر كل المحاذير التي تذهب معها.حتى أنا لست على يقين من أن الرسالة مرشح سوف تتلقى كافة الرسائل..صافي قد لا تكون تصفية لهم من وراء الكواليس قبل إرسالها إلى IMessageFilter, ولكن الأمر يستحق النار.

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