मैं System.Windows.Forms.Control
के लिए संदर्भ स्रोत पर एक नज़र, और कोड कि Invoke
के साथ संबंधित था इस तरह दिखता है:
try {
InvokeMarshaledCallback(current);
}
catch (Exception t) {
current.exception = t.GetBaseException();
}
GetBaseException
:
public virtual Exception GetBaseException()
{
Exception inner = InnerException;
Exception back = this;
while (inner != null) {
back = inner;
inner = inner.InnerException;
}
return back;
}
तो जाहिरा तौर पर यह इस तरह है डिजाइन द्वारा। स्रोत में टिप्पणियां इस बारे में कोई स्पष्टीकरण नहीं देती हैं कि वे ऐसा क्यों करते हैं।
संपादित करें: कुछ साइट है कि अब दावों इस टिप्पणी माइक्रोसॉफ्ट पर एक आदमी से आया है चला गया है:
रिकॉर्ड में WinForm comfirmation के आधार पर, हमारे विश्लेषण मूल कारण की सही है और इस व्यवहार है इरादा है। कारण उपयोगकर्ता को बहुत अधिक विंडोज़ देखने से रोकता है। फर्म आंतरिक तंत्र। ऐसा इसलिए है क्योंकि Winform का डिफ़ॉल्ट त्रुटि संवाद अपवाद विवरण दिखाने के लिए एप्लिकेशन। थ्रेड अपवाद भी प्रदान करता है। .Net Winform टीम अन्य अपवाद जानकारी को ट्रिम करती है ताकि डिफ़ॉल्ट त्रुटि संवाद अंतिम उपयोगकर्ता को सभी विवरण प्रदर्शित नहीं करेगा।
इसके अलावा, कुछ एमएसएफटी ने इस व्यवहार को बदलने के लिए सुझाव दिया है। हालांकि, .Net विनफॉर्म टीम सोचती है कि फेंकने के लिए अपवाद बदलना परिवर्तन है और इसी कारण से WinForms एप्लिकेशन के लिए सबसे निचले अपवाद भेजते रहेंगे। थ्रेडएक्सप्शन हैंडलर।
मुझे लगता है कि 'प्रतीक्षा टास्क.रुन()' प्रासंगिक नहीं है। आपको इसे अपने प्रश्न से छोड़ देना चाहिए, क्योंकि यह केवल उस मुद्दे से विचलित होता है जिसके बारे में आप पूछ रहे हैं। –
यह दिलचस्प है। अगर हम अभी तक एक और आंतरिक अपवाद जोड़ते हैं, तो यह हमें भी देगा। – Chris
फ्लैगर्स: इसे [इस दूसरे एक] के डुप्लिकेट के रूप में फ़्लैग करने से पहले वास्तव में प्रश्न को पढ़ने की देखभाल करें (http://stackoverflow.com/questions/15704711/how-can-i-use-control-invoke-to-throw- एक-अपवाद-कि-अभ्यस्त होने वाली नजरअंदाज कर दिया)? – Juan