2012-11-26 4 views
8

लटकता है मैं सी ++ में एक ऐप विकसित कर रहा हूं जो उपयोगकर्ता इंटरैक्शन से संबंधित महत्वपूर्ण घटनाओं की अधिसूचना प्राप्त करने के लिए यूआईयूटोमेशन का उपयोग करता है। मैंने खिड़की खोले कार्यक्रमों के लिए सुनने के लिए AddAutomationEventHandler को कॉल करके एनेवेंट हैंडलर की कोशिश की है, लेकिन मुझे अधिसूचना रोकने और बाहर निकलने से पहले सफाई करने में समस्याएं आ रही हैं। यदि उपयोगकर्ता ने फ़ायरफ़ॉक्स जैसे कुछ एप्लिकेशन लॉन्च किए हैं, तो RemoveAutomationEventHandlerhangs को कॉल करें। (RemoveAllEventHandlers को कॉल करना भी इस मामले में लटकता है।) ध्यान दें कि ईवेंट हैंडलर जोड़ने या निकालने के लिए सभी कॉल एक ही गैर-यूआई थ्रेड के संदर्भ में किए जाते हैं।IUIAutomation :: RemoveAllEventHandlers

नोट: मैं विंडोज 7 पर और Windows 8 पर

क्यों यह या हो रहा है कि यह कैसे तय करने के लिए किया गया है पर कोई भी विचार इस व्यवहार देख रहा हूँ? संरचना ने घटना को अन्य सभी से अलग कैसे बदल दिया है?

उत्तर

3

कर्नेल WinEvent हैंडलर के माध्यम से विंडो खुली/बंद घटनाओं को लागू किया जाता है; संरचना परिवर्तन घटनाओं में क्लाइंट ऐप शामिल है। क्या आपके गैर-यूई थ्रेड पंप संदेश हैं? यूआई ऑटोमेशन को क्रॉस-प्रोसेस संचार काम करने के लिए संदेशों को पंप करने की आवश्यकता है।

+1

क्या आप संदेशों को पंप करने की आवश्यकता के बारे में कुछ और बता सकते हैं? क्या आप विंडोज संदेशों के बारे में बात कर रहे हैं? किसी को ऐसा करने के बारे में कैसे जाना चाहिए और सभी यूआईएट्यूमेशन कॉल और घटनाएं मूल रूप से क्रॉस-प्रोसेस नहीं हैं? –

+1

@o_weisman विशेष रूप से, एकल-थ्रेडेड अपार्टमेंट (एसटीए) धागे को थ्रेड में प्रेषित आने वाली COM कॉल प्राप्त करने के लिए विंडोज संदेशों को पंप करना होगा। यदि आपने अपना धागा एमटीए में रखा है (या आप प्रबंधित कोड का उपयोग कर रहे हैं, जो एक ही चीज़ कम या कम है), तो आने वाली COM कॉल एमटीए में किसी भी प्रतीक्षा थ्रेड पर प्रेषित की जा सकती हैं। और हां, अधिकांश यूआई ऑटोमेशन कॉल और घटनाएं मूल रूप से पार-प्रक्रिया होती हैं। –

+1

हाय एरिक, प्रतिक्रिया के लिए धन्यवाद। ओपी के विपरीत, मैं यूआई ऑटोमेशन के प्रबंधित सी # पुस्तकालयों का उपयोग कर विकास कर रहा हूं और फिर भी, मुझे कई बार RemoveAllEventHandlers में समान हैंग का अनुभव हो रहा है। और भी अनोखा क्या है, परीक्षण किए गए एप्लिकेशन में विनफॉर्म विंडोज़ खोलने और मेरे यूआई ऑटोमेशन विंडो ओपन किए गए हैंडलर के कॉलिंग के बीच मुझे बहुत देर देरी (मिनटों में) दिखाई दे रही है। कभी इस तरह के व्यवहार में आते हैं? –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^