मुझे लगता है कि इस मामले का दिल यह समझना है कि धागे के भीतर होने वाले अपवादों को संभालने के लिए कॉलिंग थ्रेड को पास नहीं किया जाएगा।
private static void RebelWithoutACause()
{
throw new NullReferenceException("Can't touch this!");
}
की आप एक नया धागा है कि अपने कार्यक्रम में इस विधि कॉल बनाने के लिए, और एक सुरक्षित प्रोग्रामर किया जा रहा है, तो आप एक में काम लिफाफे में तय मान लीजिए:
उदाहरण के लिए, यदि आप एक विद्रोही विधि है कहना try/catch
ब्लॉक:
private static void Main(string[] args)
{
try
{
var thread = new Thread(RebelWithoutACause);
thread.Start();
thread.Join();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
हालांकि, अगर आप डीबगर में इस चलाने के लिए, आपको पता चल जाएगा कि आप catch
ब्लॉक करने के लिए कभी नहीं मिलेगा, और बदले धागा को मार डाला जाएगा, और डिबगर है कि आप शिकायत एक अनचाहे अपवाद है ।
आपको अपवादों को संभालने के तरीके को चुनने की आवश्यकता है, लेकिन प्रत्येक थ्रेड एंट्री विधि के अंदर हैंडलिंग की आवश्यकता है। विशिष्ट हैंडलिंग में विवरण लॉगिंग करना, यूआई के माध्यम से उपयोगकर्ताओं को सूचित करना, और अपने आवेदन को जितनी अच्छी तरह से कर सकते हैं उतना बंद करना शामिल है।
स्रोत
2012-04-16 22:21:22
नोट आप * कभी नहीं * एक अपवाद rethrow की तरह तुम वहाँ क्या करना चाहिए। कैच ब्लॉक में बस 'फेंक'; ' – Joey
मुझे पता है कि मैं – Hiyasat
संदेश के साथ "सिस्टम.एक्सप्शन" से प्राप्त कस्टम अपवाद फेंकता हूं, आपको उस जानकारी के साथ * नया * अपवाद फेंकना है जिसे आप जोड़ना चाहते हैं। * मूल * अपवाद को इनरएक्सप्शन के रूप में पास करें। ऐसा केवल तभी करें जब अतिरिक्त जानकारी उच्च मान का है क्योंकि इससे समस्या निवारण अधिक कठिन हो जाता है। –