मैं निम्नलिखित घटकों के साथ काम कर रहा हूँ:BackgroundWorker अपवाद हैंडलिंग
- एक पुस्तकालय मेरी लॉगिंग
- उद्यम पुस्तकालय अपवाद हैंडलिंग आवेदन ब्लॉक का परीक्षण करने के
- एक परीक्षण-कंसोल (जो एक अपवाद फेंकता है)
- उद्यम पुस्तकालय प्रवेश आवेदन ब्लॉक
मैं का उपयोग करके पुस्तकालय विधि लागू कर रहा हूँ एक पृष्ठभूमि कार्यकर्ता। पुस्तकालय अपवाद फेंकता है लेकिन RunWorker पूर्ण हैंडलर कभी नहीं कहा जाता है।
अपवाद को पकड़ने का एकमात्र तरीका एक प्रयास/पकड़ ब्लॉक के साथ अपने DoWork हैंडलर कोड को घेरना है।
क्या RunWorkerCompletedEventArgs.Error संपत्ति गलत समझा गया है? क्या यह पृष्ठभूमि अपॉर्कर द्वारा पकड़े गए अपवादों के लिए नहीं है?
Codesample:
static BackgroundWorker w = new BackgroundWorker();
w.DoWork += new DoWorkEventHandler(w_DoWork);
w.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(w_RunWorkerCompleted);
w.RunWorkerAsync();
static void w_DoWork(object sender, DoWorkEventArgs e)
{
MyClass m = new MyClass();
w.result = m.Compute();
}
static void w_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
HandleException(e.Error);
}
/* result related code */
}
static void HandleException(Exception e)
{
ExceptionPolicy.HandleException(e, "MyPolicy");
}
ऊपर नमूना मेरे कंसोल आवेदन की एक समाप्ति की ओर जाता है। बनाम 2010 आउटपुट बिल्कुल कुछ नहीं लिखता (केवल डिफ़ॉल्ट आउटपुट)।
तो समस्या कहां है?
// संपादित करें: यह स्निपेट लाइब्रेरी के अपवाद को पकड़ने के लिए काम करता है।
static void w_DoWork(object sender, DoWorkEventArgs e)
{
try
{
MyClass m = new MyClass();
w.result = m.Compute();
}catch(Exception e){ }
}
क्या आपके पास मुख्य धागे पर कुछ है जो इसे समाप्त होने से रोकता है? थोड़ी देर की तरह कुछ (सच)? – dcarneiro
क्या आप 100% सुनिश्चित हैं कि RunWorker पूर्ण कभी नहीं कहा जाता है? यहां एक SO सवाल है जो साबित करता है कि यह काम करना चाहिए ... http: //stackoverflow.com/questions/1044460/unhandled-exceptions-in-backgroundworker –
क्या आप डीबग नहीं कर सकते और देखें कि क्या होता है? क्या हैंडलएक्सप्शन() रिटर्न? – Reniuz