2011-02-10 14 views
18

अगर मैं इस तरह कोड है:मुख्य धागा पकड़ अपवाद किसी अन्य थ्रेड द्वारा फेंक दिया जाएगा?

try 
{ 
    Thread t = new Thread(new ThreadStart(wc.LocalRunProcess)); 
    t.IsBackground = true; 
    t.Start(); 
} 
catch (Exception ex) 
{ 
    //do something with ex 
} 

धागा t द्वारा फेंका अपवाद कैच ब्लॉक में पकड़ा जा सकता है?

उत्तर

19

नहीं। यह आपके अन्य धागे t में कोई अपवाद नहीं पकड़ पाएगा। आपको उन्हें उस धागे में पकड़ना होगा और उनके साथ उचित तरीके से निपटना होगा।

हालांकि, मेरा मानना ​​है कि ऐपडोमेन की अनहेन्ड अपवाद घटना इसकी रिपोर्ट करेगी।

+0

ठीक है, धन्यवाद ... – xbonez

+7

'WinForms के लिए आवेदन। थ्रेड अपवाद', WPF और 'AppDomain.UnhandledException' के लिए अनुप्रयोग। डिस्पैचर अननहेल्ड अपवाद 'विशिष्ट होने के लिए। –

+0

@xbonez, विस्तार करने के लिए, प्रश्न में कोड नए धागे को शुरू करेगा, फिर कैच ब्लॉक के ठीक पहले प्रसंस्करण जारी रखेगा जबकि नया धागा बस निष्पादित करना शुरू कर देगा। –

4

System.ComponentModel.BackgroundWorker पर एक नज़र डालें! इसमें अपवाद और रद्दीकरण हैंडलिंग है।

+0

क्षमा करें, प्रश्न का उत्तर देने के लिए भूल गए। कोई पकड़ किसी अन्य धागे से अपवाद नहीं मिलेगा। पृष्ठभूमिवर्कर को इस स्थिति से निपटने के लिए डिज़ाइन किया गया था। –

+0

क्या आप कह रहे हैं कि 'BackgroundWorker' एक अपवाद पकड़ लेगा जो धागे को पार करता है। उदाहरण के लिए यदि 'RunWorkAsync' में आप एक विधि को कॉल करते हैं जो एक और थ्रेड शुरू करता है और उस थ्रेड में अपवाद है, तो इसे' वर्ककंपलेटेड 'ईवेंट द्वारा संभाला जाएगा? मैं कोशिश कर रहा हूं और ऐसा लगता है कि इसे पकड़ना नहीं है। – Harrison

+0

RunWorkAsync कोड को दूसरे थ्रेड पर चलाएगा, इसलिए कोई अन्य धागा शुरू करने की आवश्यकता नहीं है। यह केवल उस धागे पर अपवाद पकड़ लेगा जो चल रहा है। –

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