से एक फॉर्म बंद करना मेरे पास एक बहुत ही अजीब व्यवहार है जो केवल एक रूप में होता है।लोड हैंडलर
असल में मैं Form
का उदाहरण बना रहा हूं, और फॉर्म को गैर-अवरुद्ध करने के लिए Show()
पर कॉल कर रहा हूं। उस फॉर्म के Load
इवेंट हैंडलर में, मेरे पास कुछ तर्क हैं जो कुछ परिस्थितियों में this.Close()
पर कॉल कर सकते हैं। यह फॉर्म बंद कर देता है, लेकिन उसके बाद क्लाइंट कोड में Show()
विधि ObjectDisposedException
फेंकता है।
ObjectDisposedException से स्टैक ट्रेस इस प्रकार है:
System.Windows.Forms.Control.CreateHandle()
System.Windows.Forms.Form.CreateHandle पर() पर
प्रणाली पर .Windows.Forms.Control.get_Handle()
System.Windows.Forms.ContainerControl.FocusActiveControlInternal()
System.Windows.Forms.Form.SetVisibleCore पर (बूलियन वैल्यू)
System.Windows.Forms.Control पर पर .Show()
... आदि।
यह मैं क्या दिखाई दे रही है है होती हैं:
Control.Show()
कहा जाता है- मेरी प्रपत्र शुरू की है
OnFormLoad
विधि, कहा जाता है के अंदरFormLoad
ईवेंट हैंडलर कहा जाता है जिसमें से मैंthis.Close()
OnFormClosing
विधि कॉल करता है lledFormClosing
ईवेंट हैंडलर कहा जाता हैDispose
मेरी फार्म पर कहा जाता है और सभी यह है उपयोगकर्ता
को नियंत्रित करता है और उसके बाद Control.Show()
विधि के अंत में कहीं न कहीं, यह फार्म के लिए एक संभाल पाने की कोशिश करता है , जो बाहर निकलता है और अपवाद फेंकता है क्योंकि ऑब्जेक्ट को डिस्पोजेड चिह्नित किया जाता है।
मेरा असली सवाल यह है कि, मैं बिना किसी अपवाद के मेरे अन्य रूपों पर यह वही चीज़ क्यों कर सकता हूं? क्या यह एक जीसी मुद्दा है? मैंने GC.Collect()
this.Close()
के ठीक बाद कॉल करने का प्रयास किया है और इससे कोई फर्क नहीं पड़ता। जैसे मैंने कहा, यह इस फ़ॉर्म पर 100% समय होता है, और कभी भी कहीं भी नहीं, बच्चे के उपयोगकर्ता नियंत्रण, फॉर्म चर का दायरा, आदि
कोई विचार?
दुर्भाग्यवश मैं विंडोज देव नहीं करता हूं, लेकिन यह सही लगता है। धन्यवाद! – LoveMeSomeCode
.Net2.0 – Vadim