2009-06-29 35 views
20

का उपयोग करें मैं विंडोज फॉर्म एप्लिकेशन विकसित करने के लिए वीएसटीएस 2008 + .NET 3.5 + C# का उपयोग कर रहा हूं। मेरा भ्रम है, लगता है आवेदन। एक्सिट आवेदन को समाप्त करने के लिए मजबूर नहीं करता है? यदि नहीं, तो आवेदन को समाप्त करने के लिए मुझे किस विधि को कॉल करना चाहिए?आवेदन।

संपादित करें 1:

आम तौर पर मुख्य विधि इस तरह है, कैसे मुख्य समारोह शान से Environment.Exit बुला बिना बाहर निकलने के लिए? पहले से

static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     try 
     { 
      Application.Run(new Form1()); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine (ex.Message); 
     } 
    } 

धन्यवाद, जॉर्ज

+2

पुन अपने संपादित बंद कर देता है - अपनी फॉर्म, बस बंद करें(); –

+0

मार्क, मैंने आपका जवाब पढ़ा, लेकिन कहां बंद करना है? मुख्य अंदर या कोड को कॉल करने के लिए कोड को प्रतिस्थापित करें। कॉल करने के लिए कोड के साथ बंद करें बंद करें? – George2

+0

'पर्यावरण.एक्सिट (पर्यावरण। एक्स्टिटकोड)' के साथ क्या गलत है?महान व्यक्तित्व – stackptr

उत्तर

32

Application.Exit वास्तव में सिर्फ संदेश पाश बहुत धीरे पूछता है।

यदि आप अपने ऐप से बाहर निकलना चाहते हैं, तो सबसे अच्छा तरीका यह है कि इसे Main से गहराई से बनाएं, और किसी भी अतिरिक्त गैर-पृष्ठभूमि धागे को साफ़ करें।

यदि आप क्रूर होना चाहते हैं ... Environment.Exit या Environment.FailFast? नोट यह कठोर है - अपने Process को मारने के समान ही।

+9

+1 धन्यवाद मार्क, मैं उलझन में हूं कि मुख्य कार्य को कैसे व्यवस्थित किया जाए। मैंने अपना कोड अपनी मूल पोस्ट में EDIT 1 अनुभाग के तहत पोस्ट किया है। कोई विचार क्यों? – colithium

+0

धन्यवाद मार्क के लिए – George2

+0

मार्क, मैंने आपका जवाब पढ़ा, लेकिन कहां बंद करना है? मुख्य अंदर या कोड को कॉल करने के लिए कोड को प्रतिस्थापित करें। कॉल करने के लिए कोड के साथ बंद करें बंद करें? – George2

4

यदि आप Application.Exit पर कॉल करते हैं तो आपका एप्लिकेशन शानदार ढंग से बाहर नहीं निकलता है (जाहिर है) ऐसा कुछ ऐसा करने से रोकता है। यह FormClosing ईवेंट में एक प्रारूप से कुछ भी हो सकता है, जो उस थ्रेड पर है जो अभी भी चल रहा पृष्ठभूमि थ्रेड नहीं है। मैं सलाह दूंगा कि आप सावधानीपूर्वक शोध करें कि यह आपकी प्रक्रिया को जीवंत रखता है, और इसे अच्छी तरह से बंद करता है। इससे आपके आवेदन को अच्छी तरह से बंद कर देना चाहिए।

आमतौर पर, एक विनफॉर्म एप्लिकेशन में, यह मुख्य रूप को बंद करने के लिए पर्याप्त होना चाहिए।

+0

आपका मतलब है कि अगर मैंने बनाए गए सभी धागे को पृष्ठभूमि के रूप में चिह्नित किया गया है, तो अनुप्रयोग को कॉल करने के बाद एप्लिकेशन को बाहर निकलना चाहिए। एक्सिट? – George2

+1

@ जॉर्ज 2: कम से कम वे अग्रभूमि धागे होने से एप्लिकेशन को जीवित नहीं रखेंगे; अन्य कारण भी हो सकते हैं कि यह बाहर नहीं निकलता है, लेकिन यह जांचने के लिए एक जगह है। मुझे लगता है कि हालांकि Thread.IsBackground के लिए डिफ़ॉल्ट मान गलत है। यद्यपि जांच की कीमत है। –

+0

धन्यवाद @ फ़्रेड्रिक, जब मैं एप्लिकेशन को कॉल करता हूं। एक्सिट करें, कुछ गैर-बैकग्राउड थ्रेड चल रहे हैं (वे स्वयं को नए थ्रेड() से शुरू कर रहे हैं। प्रारंभ करें()), क्या आपको लगता है कि यह स्पष्ट रूप से बनाए गए धागे का कारण है जो मेरे आवेदन को बाहर निकलने से रोकता है (जब आवेदन करें। एक्साइट())? – George2

2
+0

धन्यवाद पीटर, 1. मुझे यह जानने में दिलचस्पी है कि एप्लिकेशन क्या करता है। वास्तव में करें - बस संदेश पंप स्टॉप करें और कोई और फ़ंक्शन नहीं करें (जैसे टर्मिनेट एप्लिकेशन)? 2. यदि आवेदन। एक्स्टिट में विंडोज फॉर्म एप्लिकेशन को समाप्त करने के लिए फ़ंक्शन नहीं है, तो क्यों हम एप्लिकेशन को कॉल करने के बाद, अन्य थ्रेड की संपत्ति को बैकगॉरड थ्रेड पर सेट करते हैं। एक्सिटिट एप्लिकेशन को समाप्त कर देगा? – George2

+0

एमएसडीएन से हाय जॉर्ज 2: 1. एप्लिकेशन.एक्सिट सभी संदेश पंपों को सूचित करता है जिन्हें उन्हें समाप्त करना होगा, और फिर संदेशों को संसाधित करने के बाद * सभी एप्लिकेशन विंडो बंद कर देता है। 2. इसमें –

1

if (System.Windows.Forms.Application.MessageLoop) 
{ 
    // Use this since we are a WinForms app 
    System.Windows.Forms.Application.Exit(); 
} 
else 
{ 
    // Use this since we are a console app 
    System.Environment.Exit(1); 
} 

का उपयोग मैं एक ही समस्या थी जब मैं कार्यक्रम के भीतर एक नया रूप/खिड़की होगा खोलने, और केवल छुपा कि दूसरा रूप है (यह बंद करने नहीं), की खोज की आवेदन के माध्यम से मुख्य रूप से छोड़ने से मुख्य रूप को रोकें। एक्सिट();

इस मामले में दो समाधान हैं। सबसे पहले आवेदन (बजाय) के बजाय मुख्य रूप पर बंद() का उपयोग करना है। निम्नलिखित

if (secondForm != null && !secondForm.IsDisposed) secondForm.Dispose(); 
+0

mainForm.Close() को समाप्त/बंद करने का कार्य है मेरे लिए काम करता है। मेरे पास एक छिपी हुई खिड़की थी जो इस मुद्दे का कारण बन रही थी। Close() और Application.Exit() के बीच क्या अंतर है? –

15

का प्रयास करें:: दूसरा समाधान निम्नलिखित कोड का उपयोग करने के लिए है

Process.GetCurrentProcess().Kill(); 

Environment.Exit Winforms साथ काम नहीं करता और Environment.FailFast अपनी ही अपवाद फेंकता है।

-1

मैंने पाया कि बस तुम सब करने की application.exit कर के insted है की जरूरत है और सभी तुम सिर्फ करने के लिए अंत में डाल दिया जाता है कि सीधे शब्दों में पर्याप्त समाप्ति आदेश यह

+0

यह वास्तव में प्रश्न का उत्तर नहीं देता है। अन्य चीजों के अलावा, आप यह नहीं कहते कि 'एंड' का अर्थ क्या है। क्या आप वीबी.नेट का जिक्र कर रहे हैं? सवाल सी # के बारे में है। –

+0

आह क्षमा करें आदमी तो मुझे नहीं पता – Leon