2012-06-29 7 views
5

मैं किनेक्ट पर काम कर रहा हूं, और स्पोरैडिक रूप से किनेक्ट विजुअल स्टूडियो क्रैश बनाता है।विजुअलस्टूडियो को क्रैश करने से रोकने के लिए किनेक्ट यूएसबी पोर्ट के हैंडल को कैसे बंद करें?

जब मैं मुझे पता चला कि Kinect किसी अन्य प्रक्रिया में पहले से प्रयोग में है डिबगिंग के बाद kinectSensor.Start() विधि कॉल हो रहा है।

लेकिन कोई अन्य प्रक्रिया किनेक्ट का उपयोग नहीं कर रही है! यह मेरी मशीन को बूट करने और ऐप लॉन्च करने के बाद सुबह में एक बार हुआ। लेकिन जब भी मैं किनेक्ट ऐप लॉन्च करता हूं (विजुअलस्टूडियो 2010 में डिबगिंग मोड में), मैं एप्लिकेशन को रोकता हूं और कुछ कोड संशोधन के बाद मैं ऐप को फिर से लॉन्च करता हूं और उस समय यह काम नहीं करता है, मेरे पास है उपरोक्त अपवाद मिला और 2sec विजुअल स्टूडियो दुर्घटनाओं के बाद।

इसके अलावा मैं (डिबगिंग के दौरान Kinect सेंसर के राज्य के नीचे) की जाँच करता है, तो Kinect पहले से चल रहा है और यह स्थिति नहीं है:

कि

state of kinect sensor (debug mode)

सब से ऊपर अजीब बात है कभी कभी यह काम करता है हफ्तों के लिए ठीक है, और उसके बाद यह ऐप के प्रत्येक दो/तीन लॉन्च के लिए दो दिनों के लिए यह चीज़ बनाता है।

एकमात्र समाधान मैं इस विषय पर पाया एक बहुत ही इसी तरह की समस्या के साथ एक पुरुष से है (इंटरनेट पर सिर्फ एक ही?): Imad Elayyan

जब मैं Process Explorer लांच मैं यूएसबी पोर्ट से निपटने का एक ही समस्या का पता चला (फोटो पर दिखाया गया है), एक उत्परिवर्ती प्रक्रिया जिसे हम बंद करते समय समाप्त नहीं किया जाता है।

mutant process for the USB handle of the Kinect

लेकिन उनके समाधान नहीं वास्तव में एक दीर्घकालिक समाधान है: मैं मैन्युअल उत्परिवर्ती को मारने के लिए और फिर से शुरू VisualStudio है। कभी-कभी मुझे सुबह 20 बार वीएस को पुनरारंभ करना पड़ता है ...

क्या यूएसबी पोर्ट (कोड में) के हैंडल को ठीक से बंद करने का कोई तरीका है ताकि जब मैं ऐप बंद कर दूं तो यह संभाल लें और वीएस दुर्घटना अब और नहीं बनाता है?

किसी भी मदद की सराहना की जाएगी, यह वास्तव में मुझे परेशान कर रहा है और यह मुझे पागल बनाता है।

अतिरिक्त जानकारी:

मैं विंडोज के लिए SDK1.5 + Kinect उपयोग कर रहा हूँ लेकिन यह भी SDK1.0 + Kinect XBox360

मैंने के साथ भी थी पहले ही वीएस के एक और उदाहरण के साथ वीएस डीबग करने का प्रयास करें।

+0

यह एक एसडीके बग की तरह लगता है, या एसडीके टीम को कम से कम कुछ पता होना चाहिए। क्या आप इस परियोजना परियोजना को किसी भी तरह रिपोर्ट कर सकते हैं? दुर्भाग्य से मैं इसे https://connect.microsoft.com/ – Rup

+0

पर नहीं देख रहा हूं, मुझे नहीं मिला कि उन्हें कैसे संपर्क करें। मैंने विंडोज़ वेबसाइट (डेवलपर => तकनीकी सहायता प्राप्त करने के लिए) के लिए अपने लिंक और आधिकारिक किनेक्ट की कोशिश की, लेकिन मुझे एक्सबॉक्स लाइव पर रीडायरेक्ट किया गया है और फिर मैं अपनी समस्या का समाधान करने में असमर्थ हूं। मैं फिर से खोज करूंगा ... – astreal

+0

वहां भी [उनके ट्विटर] (https://twitter.com/KinectWindows), और उनके [एमएसडीएन मंच] (http://social.msdn.microsoft.com/Forums/en- यूएस/श्रेणी/kinectsdk) - लेकिन माइक्रोसॉफ्ट मंचों में मुझे बहुत भाग्य रिपोर्टिंग बग नहीं मिली है: -/ – Rup

उत्तर

0

ठीक है दोस्तों, देखभाल के लिए धन्यवाद। मुझे लगता है कि मुझे अपनी समस्या का स्रोत मिला लेकिन मुझे अभी भी हैंडल पोर्ट के लिए स्पष्टीकरण की कमी है।

तथ्य:

  1. मैं अपने समाधान में 3 परियोजनाओं, दो वर्गों पुस्तकालय है: Kinect.dll जो डिवाइस के लिए कनेक्शन बनाने, इशारा recognitionj हिस्सा है और कर्सर निर्माण संभाल। KinectControls.dll जो नियंत्रण (बटन, सीमा, चार्ट 3 डी ...) बनाते हैं जो कर्सर से बातचीत कर सकते हैं। और एक परीक्षण परियोजना।

  2. Kinect.dll Kinect + कुछ कस्टम घटना की घटना का शुभारंभ: ColorFrameReady, DepthFrameReady, GestureRecognised ...

  3. घटना के अधिकांश विधानसभा में आंतरिक हैं, लेकिन कुछ बाहर से दिखाई हैं कक्षाएं।

  4. पंजीकृत प्रत्येक कार्यक्रम अनियंत्रित (या तो मैंने सोचा) है।

  5. मैंने Kinect से संबंधित कक्षाओं के लिए facade pattern लागू किया। KinectFacade में KinectStop विधि है जो कनेक्शन और अनधिकृत घटनाओं को बंद करता है। समस्या का

रूट:

जब अनुप्रयोग बंद हो रहा है, जो Kinect और विधानसभा में अपंजीकृत हैंडलर बंद कर दिया Application.Current.Shutdown() विधि KinectStop कहा जाता है। लेकिन बाहरी असेंबली में किनेक्ट बंद होने के बाद अपंजीकरण को बुलाया गया था (भले ही अनियंत्रण को Application.Current.Shutdown() पर भी बुलाया गया था) जिससे 'मूल/सामान्य' त्रुटि उत्पन्न हुई। इसलिए मैंने अनियंत्रण हटा दिया।

जब आप Kinect घटना के पंजीकरण रद्द नहीं करते हैं और Kinect बंद कर देता है (KinectSensor.stop() विधि कहा जाता है), यह (कई मायनों) यूएसबी संभाल भले ही आवेदन बंद कर दिया है और किसी भी धागा समाप्त रहता है !! और इसके बाद: एप्लिकेशन को फिर से खोलने का कोई तरीका नहीं (Kinect.Start() क्रैश) और आखिरकार जब आप विजुअल स्टूडियो को बंद करने का प्रयास करते हैं तो यह क्रैश हो जाता है (जैसा कि मेरे प्रश्न में बताया गया है)।

समाधान मैं

पाया है जब KinectStop() मैं Kinect बंद करने से पहले एक टाइमर का उपयोग करें ताकि बाहर विधानसभाओं में हर वर्गों घटनाओं अपंजीकृत कर सकते हैं कहा जाता है।

इसके अलावा अब से बाहर 'सामान्य' घटना बाहरी कक्षाओं से उपलब्ध नहीं है: मुखौटा उन घटनाओं को संभालता है और FastSmartWeakEvent बढ़ाता है जो बाहरी दुनिया से उपलब्ध हैं। यह स्मृति रिसाव हल करता है और कुछ परिस्थितियों में भी मेरी समस्या का समाधान कर सकता है।

तब से यूएसबी पोर्ट को संभाला नहीं जाता है और विजुअल स्टूडियो अब और क्रैश नहीं होता है।

सारांश

मैं इसे से बचने के लिए मेरी समस्या की जड़ें और एक समाधान मिल गया है। मुझे उम्मीद है कि यह किसी भी समस्या के साथ किसी की मदद करेगा।

हालांकि I'still समझ में नहीं आता क्यों अनुप्रयोग को बंद और/या KinectSensor.Stop() विधि बुला एसडीके से करीब सभी घटनाओं हैंडलर/धागे/प्रक्रियाओं/पोर्ट हैंडल does'nt है। और क्यों दृश्य स्टूडियो बंद करना इसे दुर्घटनाग्रस्त कर देता है भले ही पिछले में से कोई भी अभी भी चल रहा हो?

यदि किसी के पास कोई सुझाव है तो इसका स्वागत किया जाएगा?

-2

विंडोज कोलाइडर आज़माएं। यह आपकी समस्या को आसानी से हल करेगा।

+0

वह क्या है? मैं Google पर कुछ भी स्पष्ट नहीं देख सकता। – Rup

0

पूरी तरह से सुनिश्चित करें कि किनेक्ट यूएसबी 2.0 पोर्ट में प्लग है और यूएसबी 3.0 नहीं है।

माइक्रोसॉफ्ट किनेक्ट USB3.0 और किनेक्ट के साथ एक का उपयोग करने के सभी प्रकार के पागल व्यवहार परिणामों का समर्थन नहीं करता है।

मुझे आपके जैसे ही कुछ स्पोरैडिक मुद्दों का सामना करना पड़ रहा था और जब मैंने अपनी मशीन पर कुछ यूएसबी 2.0 पोर्टों में से एक का उपयोग शुरू किया तो समस्या हल हो गई।

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