थ्रेड कोड 0 (0x0) के साथ बिना किसी अपवाद के बाहर निकल गया है


97

मेरे C # एप्लिकेशन को डीबग करते समय मैंने निम्नलिखित वाक्य की एक बड़ी मात्रा देखी है:

धागा - कोड 0 (0x0) के साथ बाहर निकल गया है।

एप्लिकेशन काम करना जारी रखता है और कोई अपवाद नहीं पकड़ा / अनहैंड किया जाता है।

आवेदन विंडोज 7 64 बिट पर चल रहा है और x86 प्लेटफॉर्म के साथ डिबग किया गया है।


1
क्या आप सुनिश्चित हैं कि वे आपके धागे हैं? यदि हां, तो क्या आप उनसे खत्म होने की उम्मीद नहीं करते हैं?
SLaks

जवाबों:


142

यह केवल डिबगिंग संदेश है। आउटपुट विंडो में राइट क्लिक करके आप उसे बंद कर सकते हैं और अनचेक कर सकते हैं Thread Exit Messages

http://msdn.microsoft.com/en-us/library/bs4c1wda.aspx

अपने एप्लिकेशन से प्रोग्राम आउट करने के अलावा, आउटपुट विंडो निम्नलिखित के बारे में जानकारी प्रदर्शित कर सकती है:

  • मॉड्यूल डिबगर लोड या अनलोड किया गया है।

  • अपवाद जो फेंके जाते हैं।

  • बाहर निकलने की प्रक्रिया।

  • धागे जो बाहर निकलते हैं।


10

ठीक है, एक एप्लिकेशन में बहुत सारे धागे समानांतर में चल सकते हैं। कुछ आपके द्वारा चलाए जाते हैं, कोडर, कुछ फ्रेमवर्क कक्षाओं द्वारा चलाए जाते हैं (जासूसी रूप से यदि आप एक जीयूआई environnez में हैं)।

जब किसी थ्रेड ने अपना कार्य पूरा कर लिया है, तो यह बाहर निकलता है और अस्तित्व में आता है। इसमें कुछ भी खतरनाक नहीं है और आपको परवाह नहीं करनी चाहिए।


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

ठीक है, शायद धागे वास्तव में आपके आवेदन को प्रभावित करते हैं, लेकिन आपको जो संदेश मिलता है, वह बताता है कि वे पर्याप्त रूप से समाप्त कर देते हैं। तो आप कोशिश कर सकते हैं और पा सकते हैं कि उन्हें क्यों चलाया जाता है (डिबग मेनू => विंडोज़ => थ्रेड्स), लेकिन यह सामान्य है कि वे समाप्त होते हैं।
केक

वे सामान्य रूप से समाप्त हो जाते हैं लेकिन लिनक्स सर्वर डिफंक्शन प्रक्रिया .net फ्रेमवर्क थ्रेड्स का साइड-इफेक्ट हो सकता है। हो सकता है कि एप्लिकेशन में मल्टीथ्रेडिंग कार्यान्वयन में विभिन्न प्रोग्रामिंग त्रुटियां हों। क्या यह संभव है?
जियोनाटा

मुझे नहीं पता। यह linuw सर्वर .NET चला रहा है? मोनो का उपयोग कर रहे हैं? वास्तव में आपकी समस्या क्या है? दोषपूर्ण प्रक्रियाएं?
कीक

हां, Linux सर्वर को क्रैश करने वाली dufunct प्रक्रियाएं।
जियोनाटा

7

ब्लूएम के स्वीकृत उत्तर को पूरा करने के लिए, आप इसे यहां दे सकते हैं:

उपकरण> विकल्प> डिबगिंग> सामान्य आउटपुट सेटिंग> थ्रेड एक्ज़िट संदेश: बंद


5
ब्लूएम के स्वीकृत जवाब में वास्तव में एक सरल समाधान है: "आप आउटपुट विंडो में राइट क्लिक करके स्विच को समाप्त कर सकते हैं और थ्रेड समाप्त संदेश को अनचेक कर सकते हैं"
सिमोन मैकेंजी

5

यदि आपका आवेदन सीधे या परोक्ष रूप से थ्रेड्स का उपयोग करता है (यानी एक 3-पार्टी लाइब्रेरी में जैसे दृश्य के पीछे) थ्रेड्स समाप्त होने के बाद यह पूरी तरह से सामान्य है ... जो मूल रूप से आपके द्वारा वर्णित है ... डीबगर इस संदेश को दिखाता है ... आप डिबगर को इस संदेश को प्रदर्शित नहीं करने के लिए कॉन्फ़िगर कर सकते हैं यदि आप इसे नहीं चाहते हैं ...

यदि उपरोक्त मदद नहीं करता है, तो कृपया अधिक विवरण प्रदान करें क्योंकि मुझे यकीन नहीं है कि वास्तव में आपको क्या समस्या है ...


1

आपके द्वारा बनाई गई प्रत्येक विंडो का समर्थन करने के लिए फ्रेमवर्क थ्रेड बनाता है, जैसे कि जब आप फॉर्म और .Show () बनाते हैं। जब खिड़कियां बंद हो जाती हैं, तो थ्रेड समाप्त हो जाते हैं (यानी, वे बाहर निकल जाते हैं)।

यह सामान्य व्यवहार है। हालाँकि, यदि एप्लिकेशन थ्रेड्स बना रहा है, और इन थ्रेड्स के अनुरूप बहुत सारे थ्रेड एग्जिट संदेश हैं (कोई व्यक्ति संभवतः थ्रेड्स के नाम, ऐप में उन्हें अलग-अलग नाम देकर बता सकता है), तो शायद यह एक समस्या का संकेत है प्रोग्राम लॉजिक एरर के कारण ऐप को थ्रेड्स बनाते समय ऐसा नहीं करना चाहिए।

यह एक दिलचस्प अनुवर्ती होगा कि मूल पोस्टर हमें बताएं कि सर्वर क्रैश के साथ समस्याओं के बारे में उन्होंने क्या खोज की थी। मुझे लगता है कि इसका इससे कोई लेना-देना नहीं है ... लेकिन पोस्ट की गई जानकारी से यह बताना मुश्किल है।


1

Linq प्रश्नों को निष्पादित करने से अतिरिक्त थ्रेड उत्पन्न हो सकते हैं। जब मैं उस कोड को निष्पादित करने का प्रयास करता हूं जो तत्काल विंडो में Linq क्वेरी संग्रह का उपयोग करता है तो यह अक्सर चलने से मना कर देता है क्योंकि डिबगर के लिए पर्याप्त थ्रेड उपलब्ध नहीं हैं।

जैसा कि दूसरों ने कहा है, जब वे समाप्त हो जाते हैं तो धागे से बाहर निकलने के लिए पूरी तरह से सामान्य है।


-1

मैंने भी इस समस्या का सामना किया है और समाधान है:

  1. ओपन सॉल्यूशन एक्सप्लोर
  2. Program.cs फ़ाइल पर डबल क्लिक करें

मैंने इस कोड को फिर से जोड़ा और मेरा कार्यक्रम सही चला:

Application.Run(new PayrollSystem()); 
//File name this code removed by me accidentally.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.