2012-01-18 10 views
7

मेरे डब्ल्यूपीएफ एप्लिकेशन में मैंने एक विंडो बनाई है और इसे ShowDialog() विधि द्वारा कॉल करके एक संवाद के रूप में दिखाया है। लेकिन जब मैं बंद() विधि से विंडो बंद करता हूं तो इस संवाद विंडो के लिए अनलोड किए गए ईवेंट को निकाल दिया नहीं जाता है।डब्ल्यूपीएफ में विंडो की अनलोडेड घटना क्यों नहीं आग लगती है?

MyWindow obj = new MyWindow(); 
obj.ShowDialog(); 
obj.Close(); 

उत्तर

11

यह एक ज्ञात मुद्दा है।

उपयोग इस बजाय

yourWindow.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted; 

    private void Dispatcher_ShutdownStarted(object sender, EventArgs e) 
    { 
     //do what you want to do on closing 
    } 

पढ़ें अधिक जानकारी के

के लिए this संपादित

यदि उपरोक्त यदि आप वास्तव में प्राप्त करना चाहते हैं इस

yourWindow.Closing += new CancelEventHandler(YourWindow_Closing); 

void YourWindow_Closing(object sender, CancelEventArgs e) 
{ 

} 
+1

इस घटना को भी obj.Close के बाद फायरिंग नहीं है()। जब यह पूरा आवेदन बंद हो जाता है तो यह केवल फायरिंग होता है। – HotTester

+0

आप 'obj.Dispatcher.ShutdownStarted' सही कर रहे हैं? –

+0

हां। मैंने डिस्पैचर बनाया है। शट डाउनस्टार्ट + = डिस्पैचर_शूटडाउनस्टार्ट; संवाद विंडो के निर्माता में और ऊपर दिए अनुसार कार्य में अपनी घटना लिखी। – HotTester

0

कोशिश नहीं कर रहा है conf बंद होने की चिंताओं मुझे लगता है कि खिड़की के जीवन चक्र और प्रासंगिक घटनाओं को समझने के लिए यह सबसे अच्छा है।

हालांकि मेरी राय में पुष्टि का सर्वोत्तम स्रोत Closed ईवेंट है। Closing और Closed: अन्य ढांचे तरीके शायद अविश्वसनीय

समापन घटनाक्रम

जब एक खिड़की बंद कर देता है, यह दो घटनाओं को जन्म देती है।

खिड़की बंद होने से पहले बंद किया जाता है, और यह तंत्र प्रदान करता है जिसके द्वारा विंडो बंद होने से रोका जा सकता है। विंडो बंद होने से रोकने के लिए का एक आम कारण यह है कि विंडो सामग्री में संशोधित डेटा शामिल है। इस स्थिति में, निर्धारित करने के लिए समापन ईवेंट को संभाला जा सकता है कि डेटा गंदा है और यदि ऐसा है, तो उपयोगकर्ता से पूछने के लिए कि क्या डेटा को सहेजने के बिना विंडो बंद करना जारी रखें या विंडो बंद करना रद्द करें। निम्नलिखित उदाहरण बंद करने वाले हैंडलिंग के प्रमुख पहलुओं को दिखाता है।

इसके अलावा अधिक

समापन ईवेंट हैंडलर एक CancelEventArgs, जो BooleanCancel संपत्ति है कि आप समापन से एक खिड़की को रोकने के लिए सही पर सेट को लागू करता है पारित कर दिया है। +

अगर बंद नहीं किया जाता है, या इसे संभाला जाता है लेकिन रद्द नहीं किया जाता है, तो विंडो बंद हो जाएगी। एक खिड़की वास्तव में बंद होने से ठीक पहले, बंद उठाया गया है। इस बिंदु पर, एक खिड़की बंद होने से रोका नहीं जा सकता है।

नोट

एक खिड़की स्पष्ट रूप गैर ग्राहक और ग्राहक क्षेत्रों में प्रदान की तंत्र के माध्यम से बंद कर दिया जा सकता है, एक खिड़की भी परोक्ष अन्य में व्यवहार का एक परिणाम के रूप में बंद कर दिया गया हो सकता है आवेदन या विंडोज के कुछ हिस्सों, जिनमें निम्न शामिल हैं:

  • एक उपयोगकर्ता बंद लॉग या बन्द हो जाता है कर विंडोज़ विंडोज़

  • एक खिड़की का मालिक बंद हो जाता है।

  • मुख्य एप्लिकेशन विंडो बंद है और ShutdownMode OnMainWindowClose है।

  • शटडाउन कहा जाता है।

सभी विंडो लाइफटाइम घटनाक्रम

निम्न उदाहरण एक खिड़की के जीवनकाल में प्रमुख घटनाओं के अनुक्रम को दर्शाता है।

enter image description here

निम्न उदाहरण एक खिड़की के जीवनकाल में प्रमुख घटनाओं (ShowActivated गलत पर सेट है खिड़की दिखाया गया है से पहले) सक्रियण के बिना दिखाया गया है का क्रम दर्शाती।

enter image description here

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