2010-01-12 11 views
6

मेरे पास एक जीयूआई ऐप है जो एक सेंसर से जुड़ता है, डेटा एकत्र करता है और इसे BackgroundWorker धागे का उपयोग करके पृष्ठभूमि में संसाधित करता है।'डिस्कनेक्ट किए गए कॉन्टेक्स्ट' क्रैश को डीबग और हल कैसे करें?

जैसा कि यह खड़ा है कि मैं ProgressChanged का उपयोग कर जीयूआई में डेटा पोस्ट कर रहा हूं जो शुरू करने के लिए अच्छी तरह से काम कर रहा था। मैंने बाद में डेटा दरों में वृद्धि की है और एक समस्या की खोज की है; यदि सॉफ़्टवेयर को कुछ मिनटों तक चलाने के लिए छोड़ा गया है, तो प्रोसेसर उपयोग की मात्रा तब तक बढ़ जाती है जब तक कि यह मेरी मशीन पर दोनों कोरों पर 100% तक पहुंच जाती है और उस बिंदु पर, मुझे एक त्रुटि मिलती है जो पढ़ता है:

प्रबंधित डिबगिंग सहायक 'डिस्कनेक्टेड कॉन्टेक्स्ट' को 'myapp.exe' में कोई समस्या मिली है। अतिरिक्त जानकारी: संदर्भ 0xe2ba0 डिस्कनेक्ट हो गया है। वर्तमान संदर्भ से इंटरफेस को जारी करना (संदर्भ 0xe2d10)। इससे भ्रष्टाचार या डेटा हानि हो सकती है।

मैंने वेब के चारों ओर कुछ सामान पढ़ा है जो बताता है कि यह तब हो सकता है जब कोई GUI ऐप पर्याप्त तेज़ संदेशों को पंप करने में असमर्थ हो। मैंने देखा है कि अगर मैं खिड़की का तेजी से आकार बदलता हूं (यानी एक लोड अधिक संदेश पंप) जो मुझे लगता है सिद्धांत का समर्थन करता है तो मैं एक ही दुर्घटना को तेज कर सकता हूं?

तो सवाल यहां हैं:

  1. किसी को भी संदेश पंप के बारे में मेरी परिकल्पना के साथ सहमत हैं या नहीं?
  2. क्या कोई और स्पष्टीकरण है?
  3. क्या कोई तरीका है कि मैं इसे साबित कर सकता हूं (शायद कतार में संदेशों की संख्या देखें)?
  4. क्या ये सभी खराब कोड गंध आते हैं जो सुझाव देते हैं कि मैं इस गलत तरीके से जा रहा हूं?

कोई सलाह बहुत आभारी रूप से प्राप्त की जाएगी।

उत्तर

3

इस तरह की आवाज़ें एक बहुत ही विशिष्ट समस्या की तरह हैं और मुझे लगता है कि इसीलिए किसी ने अभी तक जवाब नहीं दिया है, लेकिन मुझे लगता है कि मैं प्रश्न # 3 पर मदद कर सकता हूं।

Spy++ आपकी विंडो पर जाने वाले संदेशों को देखने में सक्षम होना चाहिए। मुझे लगता है कि आप इसे अपने जीयूआई में संदेश पंप देखने और अपना आकार बदलने का परीक्षण करने के लिए इस्तेमाल कर सकते हैं। यदि आपने संसाधित होने की कोशिश कर रहे संदेशों की बड़ी वृद्धि देखी है तो यह आपकी परिकल्पना की पुष्टि कर सकता है।

एक तरफ, मैंने पढ़ा है कि आप इस एमडीए को दूर करने के लिए मुख्य थ्रेड अपार्टमेंट को STATHread से MTAThread में बदलने में सक्षम हो सकते हैं।

पर्फैप्स आप फ़ाइल को सेंसर रीडिंग को थूकने के लिए अपने ऐप को संशोधित कर सकते हैं या जीयूआई को लगातार अद्यतन करने के बजाय उन्हें एक अलग तंत्र में कतार में डाल सकते हैं। एचटीएच।

+1

मैंने एमटीएटीएचड सेटिंग की कोशिश की जो केवल कभी-कभी दुर्घटना को जोड़ना प्रतीत होता था। मैंने इसके बजाय एक queuenig तंत्र को अपनाया है और डिस्प्ले कोड के हिस्से में एक बग फॉनड किया है जो 'RichTextBoxControl' को भरने वाला था। उन दोनों के बीच, ऐसा लगता है कि मैंने समस्या हल कर ली है। सुझावों के लिए धन्यवाद। –

+0

मैंने देखा है कि यह कुछ और बार होता है और यह डेटा निर्माता थ्रेड से इसके श्रोताओं तक बहुत से 'प्रोग्रेस चेंज किए गए' अनुरोध भेजने की कोशिश करके निश्चित रूप से ट्रिगर होता है। –

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