5

मेरे पास एक WPF एप्लिकेशन है जिसमें BackgroundWorker है। मैंने इस बीजीडब्ल्यू में अपवाद फेंक दिया लेकिन यह कहीं भी नहीं दिखाया गया है !, सिर्फ पृष्ठभूमि कार्यकर्ता अपने WorkerFinished घटना को चलाता है।मेरा अपवाद किसी डब्ल्यूपीएफ एप्लिकेशन में कोई फर्क नहीं पड़ता है?

यह कहां जा रहा है?

+1

'BackgroundWorker' पर MSDN प्रविष्टि से:" अगर आपरेशन एक अपवाद है कि आपके कोड को संभाल नहीं करता है को जन्म देती है, BackgroundWorker अपवाद लग जाती है और यह गुजरता में RunWorker पूर्ण ईवेंट हैंडलर, जहां इसे System.ComponentModel.RunWorkerCompletedEventArgs की त्रुटि प्रॉपर्टी के रूप में उजागर किया जाता है। " – dlev

+1

WPF के साथ कुछ भी नहीं करना है। Http://www.albahari.com/threading/ को एक पठन दें, यह समय बिताएगा! – Yahya

उत्तर

7

प्रत्येक थ्रेड में इसका स्वयं का कॉल स्टैक होता है; अपवाद केवल अपने स्वयं के कॉल स्टैक को बढ़ा सकते हैं, उनके लिए किसी अन्य थ्रेड के कॉल स्टैक में "खून बहने" का कोई तरीका नहीं है।

अपने अपवाद BackgroundWorker का कोड है कि DoWork ईवेंट हैंडलर अपवाद खत्म हो जाएगा स्पष्ट रूप से पकड़ लिया और बल्कि यह कॉल स्टैक के शीर्ष तक पहुंचने और आवेदन दुर्घटना करने के लिए अनुमति की तुलना में Error संपत्ति में संग्रहीत किया जा रहा आग करने के लिए बुलबुले है।

यदि आप बीजीडब्ल्यू अपवाद फेंकते हैं तो प्रोग्राम समाप्त करना चाहते हैं तो आपको पूर्ण घटना को संभालने, अपवाद की जांच करने, और फिर इसे फिर से फेंकने या एक नया अपवाद फेंकने की आवश्यकता होगी।

+1

पृष्ठभूमि थ्रेड में एक अपवाद भी एप्लिकेशन को क्रैश करेगा, इस मामले में BackgroundWorker क्लास को अपवाद फेंकने पर एप्लिकेशन को क्रैश न करने के लिए डिज़ाइन किया गया है। – skjagini

+0

@ सुजितजगिनी आप सही हैं; संपादित। – Servy

4

यहां देखें, एक अच्छा उदाहरण है। अपवाद RunWorkercompleted में throwned में

Unhandled exceptions in BackgroundWorker

var worker = new BackgroundWorker(); 
worker.DoWork += (sender, e) => 
    { 
     throw new InvalidOperationException("oh shiznit!"); 
    }; 
worker.RunWorkerCompleted += (sender, e) => 
    { 
     if(e.Error != null) 
     { 
      MessageBox.Show("There was an error! " + e.Error.ToString()); 
     } 
    }; 
worker.RunWorkerAsync(); 
संबंधित मुद्दे