मैं कुछ अजीब व्यवहार देख रहा हूँ जब अपवाद फेंक और उन्हें Application.ThreadException
ईवेंट हैंडलर में पकड़ने।आंतरिक अपवाद थ्रेडएक्सप्शन हैंडलर तक क्यों पहुंचता है और वास्तविक फेंक दिया अपवाद नहीं?
मूल रूप से नीचे दिए गए नमूने में क्या हो रहा है यह है कि BackgroundWorker
के DoWork
ईवेंट हैंडलर में एक अपवाद फेंक दिया गया है। RunWorkerCompleted
इवेंट हैंडलर मूल अपवाद के रूप में मूल के साथ एक नया अपवाद पुनर्स्थापित करता है।
क्यों भीतरी अपवाद ThreadException
ईवेंट हैंडलर में दिखता है और acutal अपवाद उत्पन्न नहीं किया जा रहा? यदि मैं RunWorkerCompleted
ईवेंट हैंडलर में आंतरिक अपवाद प्रदान नहीं करता हूं, तो सही अपवाद दिखाई देगा।
using System;
using System.Windows.Forms;
using System.ComponentModel;
namespace WierdExceptionApp
{
class WierdExceptionForm : Form
{
BackgroundWorker worker = new BackgroundWorker();
public WierdExceptionForm()
{
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.RunWorkerAsync();
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
throw new Exception("worker_RunWorkerCompleted", e.Error);
}
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
throw new Exception("worker_DoWork");
}
[STAThread]
static void Main()
{
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.Run(new WierdExceptionForm());
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
MessageBox.Show(e.Exception.Message);
}
}
}
एस्टाउन्डिंग; यह मुझे साकार करने के बिना वर्षों तक मुझे काट रहा है। मैं उन चीज़ों के लिए कभी-कभी त्रुटि रिपोर्ट देखता हूं जिन्हें मैं कसम खाता हूं। वे बहुत दुर्लभ थे कि उन्हें देखने में काफी समय नहीं लगे, लेकिन अंत में यह कुछ महत्वपूर्ण के साथ हो रहा था, और मुझे एहसास हुआ कि अपवाद रास्ते में बदल रहा था। WTF ?? –