2016-05-27 16 views
7

मेरे पास एक एप्लिकेशन (एक्सएनए प्रोजेक्ट टेम्पलेट के आधार पर) है जो शुरुआत में एक विंडो दिखाता है ताकि उपयोगकर्ता कुछ सेटिंग्स बदल सके। उसके बाद विंडो बंद हो गई है और कार्यक्रम एक्सएनए द्वारा प्रबंधित एक और विंडो में जारी है। लगभग 15 मिनट बाद प्रोग्राम Win32 नामक थ्रेड में क्रैश हो जाता है जो एक एक्सेस उल्लंघन के साथ मुख्य धागा नहीं है (लेकिन कभी मेरे द्वारा उत्पन्न नहीं किया गया था)।विंडो दिखाने के 15 मिनट बाद क्रैश

मानक डीबगर का उपयोग करने से यहां तक ​​कि एक स्टैक ट्रेस भी नहीं है। मूल डीबगर का उपयोग करके यह केवल दिखाता है कि एक्सेस उल्लंघन Kernel32!BaseThreadInitThunk में हुआ था जो एक अनियंत्रित विधि है। एक ही समय में मुख्य धागा अभी भी मुख्य गेम लूप को खुशी से निष्पादित कर रहा है।

ध्यान रखें कि एप्लिकेशन एक शुद्ध सी # एप्लिकेशन है इसलिए यह वास्तव में मुझे परेशान कर रहा है।

कुछ परीक्षण के बाद मुझे पता लगा है कि इस भले ही मैं एक खाली विंडो दिखाने होता है:

Window window = new Window(); 
window.ShowDialog(); 

तो मेरी कोड में ऊपर दो पंक्तियों को हटाने के कार्यक्रम पूरी तरह से स्थिर बना देता है। उन्हें वापस जोड़ने से 15 मिनट (+ - 30 सेकंड) के बाद पहुंच उल्लंघन की गारंटी मिलती है।

मैंने जांच की है कि मुख्य धागा, जो खिड़की को फैलाता है, एक एसटीए धागा है। मैंने प्रेषक को मैन्युअल रूप से प्रारंभ करने का भी प्रयास किया है, लेकिन ऐसा लगता है कि यह मदद नहीं कर रहा है (प्रेषक पहले से ही चल रहा है) और मैंने विंडो को दिखाए जाने के बाद भी प्रेषक को बंद करने की कोशिश की, इससे कोई प्रभाव नहीं पड़ा।

मैंने this उत्तर में वर्णित एकाधिक धागे में विंडो दिखाने के लिए तकनीकों का उपयोग करके विंडो दिखाने का भी प्रयास किया है। लेकिन इसका कोई प्रभाव नहीं पड़ा। मैंने खिड़की दिखाने के लिए एक पूरी तरह से अलग थ्रेड लॉन्च करने का भी प्रयास किया (उसी तकनीक का उपयोग करके)। इसका कोई प्रभाव नहीं पड़ा।

कोड की ये दो पंक्तियां 15 मिनट बाद मेरे प्रोग्राम को क्रैश कैसे कर सकती हैं? खाली, मानक, खिड़की का किस तरह का साफ-सफाई आवश्यक हो सकता है?

+1

ओह मैं तो बस आप 'का उपयोग कर रहे ShowDialog देखा()'। इसके बजाय 'दिखाएँ()' का उपयोग करने का प्रयास करें। आखिरी डब्ल्यूपीएफ विंडो/संवाद बंद होने पर डब्ल्यूपीएफ आमतौर पर आपके ऐप को समाप्त करना चाहता है। मुझे बताएं कि आप कैसे जाते हैं, ऐसी कुछ चालें हैं जिनका आप उपयोग कर सकते हैं ताकि आप अभी भी 'शोडियलॉग' का उपयोग कर सकें लेकिन यह सुनिश्चित कर लें कि WPF बाद में आपके ऐप को बंद नहीं करेगा – MickyD

+0

मैंने शो और क्लोज़ (यहां तक ​​कि दिखाएं और छुपाएं) का उपयोग करने का भी प्रयास किया है। । इसका कोई प्रभाव नहीं पड़ा। मुझे लगता है कि डब्ल्यूपीएफ केवल आपके ऐप को बंद करने का प्रयास करता है यदि आपके पास 'एप्लिकेशन' इंस्टेंस है जो विंडोज़ का मालिक है और 'शटलडाउन मोड' को 'ऑनलास्टविंडोक्लोस' पर सेट किया गया है। आपके पास अन्य विचारों के प्रति उत्सुक :) –

+0

चूहों, मैं उम्मीद कर रहा था कि यह था। मुझे कुछ और सोचने दो। आपका ब्लॉग बहुत अच्छा है। मुझे आपके संतुलन वाले प्राणी पसंद हैं :) – MickyD

उत्तर

0

वस्तुओं ठीक से निपटाने नहीं से एक स्मृति से संबंधित मुद्दे की तरह लगता है ...

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