سؤال

أقوم بإنشاء خادم COM محلي باستخدام CoCreateInstance.في بعض الأحيان، يستغرق تشغيل التطبيق الذي يوفر الخادم وقتًا طويلاً.عندما يحدث هذا، يظهر Windows مربع حوار مثل هذا:

الملقم مشغول

لا يمكن إكمال الإجراء لأن البرنامج الآخر مشغول.اختر "Switch To" لتنشيط البرنامج المشغول وتصحيح المشكلة.

[التبديل إلى...] [إعادة المحاولة] [إلغاء]

لقد وجدت إشارة إلى خاصية Visual Basic على كائن التطبيق، OleRequestPendingTimeout، والتي يمكن استخدامها للتحكم في الوقت قبل ظهور مربع الحوار هذا.لا يمكنني العثور على أي وثائق جيدة حول هذا الأمر أو ما يعادله مفيدًا من C++.يمكن لأي شخص لي نقطة في الاتجاه الصحيح؟

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

المحلول

إذا كنت تستخدم MFC، اعتدنا أن نفعل أشياء مثل هذه:

// prevent the damned "Server Busy" dialog.
AfxOleGetMessageFilter()->EnableBusyDialog(0);
AfxOleGetMessageFilter()->EnableNotRespondingDialog(0); 

نصائح أخرى

القي نظرة على IMessageFilter و CoRegisterMessageFilter.

لزيادة مهلة المكالمة:

AfxOleGetMessageFilter()->SetMessagePendingDelay(nTimeout);

انظر التفاصيل هنا كيفية منع ظهور مربع الحوار OLE Server مشغول أثناء عملية COM طويلة

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