2009-12-08 12 views
6

शीर्षक इसके बारे में है। आईपीसी के लिए कुछ डब्ल्यूसीएफ सामान के साथ डब्ल्यूपीएफ ऐप। मैं Application.Current.Shutdown() पर कॉल करता हूं और ऐप खुशी से जारी रहता है। मैंने सोचा कि Shutdown अस्थिर होना चाहिए था।आवेदन। वर्तमान। शट डाउन()

शायद क्योंकि इसे पृष्ठभूमि धागे से बुलाया जा रहा है? क्या मुझे कुछ प्रेषक झुकाव करने की ज़रूरत है?

उत्तर

12

जब आप Application.Current.Shutdown को किसी अन्य धागे के अलावा किसी भी थ्रेड में कॉल करते हैं, तो मुझे अपवाद मिलता है, इसलिए मैं आपको "डिस्पैचर फिडलिंग" का उपयोग कर पहले से ही कहूंगा।

किसी भी मामले में, इस संकलित करता है तथा एक आवेदन इस्तीफा, इसलिए यदि डिस्पैचर बिट क्या आप आप में यह गोफन सकता है की तरह नहीं दिखता:

ThreadStart ts = delegate() 
    { 
     Dispatcher.BeginInvoke((Action)delegate() 
     { 
      Application.Current.Shutdown(); 
     }); 
    }; 
Thread t = new Thread(ts); 
t.Start(); 
+0

मैं इसे समझने की कोशिश कर रहा था और ऐसा लगता है कि यह काम करता है। क्या किसी थ्रेड में प्रेषक कॉल को लपेटने के लिए कोई स्पष्टीकरण है जिससे यह खुश हो जाता है? – StrikeForceZero

+0

कुछ कक्षाएं धागे का उपयोग करती हैं जो पृष्ठभूमि पर नहीं चलती हैं। और शटडाउन आमतौर पर केवल पृष्ठभूमि थ्रेड को मारता है। तो आपको किसी भी चर का निपटान करने का प्रयास करना चाहिए जो कक्षा का उपयोग करता है जो बाहर निकलने से पहले थ्रेडिंग का उपयोग करता है। – Zunair

10

मेरे अनुभव में सभी धागे को या तो स्पष्ट रूप से समाप्त कर दिया जाना चाहिए या एप्लिकेशन को बंद करने के लिए पृष्ठभूमि धागे के रूप में चिह्नित किया जाना चाहिए।

यहाँ पृष्ठभूमि में पढ़ने धागा बंद लात का एक उदाहरण है:

_readThread = new Thread(new ThreadStart(ReadThread)); 
_readThread.Name = "Receiver"; 
_readThread.Priority = ThreadPriority.Highest; 
_readThread.IsBackground = true; 
_readThread.Start(); 

IsBackground संपत्ति की कुंजी है। सेट किए बिना, जब आप शट डाउन कहते हैं तो धागा समाप्त नहीं होगा।

+0

ऐप सामान्य रूप से अन्य माध्यमों के माध्यम से बंद हो जाता है। – Thomas

+0

धन्यवाद इस टिप्पणी के लिए एक गुच्छा, यह मुझे पता लगाने की कोशिश कर रहा है कि मेरा आवेदन पूरी तरह से बाहर क्यों नहीं निकल रहा था। –

1

मैं केवल Application.Current.Shutdown काम नहीं कर रहा है जब मैं अनुभव मैं विजुअल स्टूडियो से चल रहा हूँ। विजुअल स्टूडियो के भीतर (कम से कम 2010 संस्करण मैं उपयोग कर रहा हूं) Application.Current.Shutdown कोई काम नहीं करता है। यदि मैं इसके माध्यम से एक कदम इस लाइन को निष्पादित करता हूं और फिर जारी रहता है। यदि मैं विंडोज एक्सप्लोरर से प्रोग्राम (एक .exe के रूप में) चलाता हूं तो Application.Current.Shutdown ठीक काम करता है।

डीबग के दौरान अन्य धागे सक्रिय होने के बाद से इसके लिए शायद एक स्पष्टीकरण है, लेकिन मैं इसे समझा नहीं सकता।

+0

हाँ, वही है, लेकिन यह वास्तव में मेरे डीबगिंग के साथ गड़बड़ है। – ProfK

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