मैं बहुत सारे विंडोज जीयूआई प्रोग्रामिंग नहीं करता हूं, इसलिए यह सभी लोगों के लिए WinForms से अधिक परिचित लोगों के लिए सामान्य ज्ञान हो सकता है। दुर्भाग्य से मैं इस मुद्दे को समझाने के लिए कोई संसाधन नहीं ढूंढ पा रहा हूं, आज मुझे डीबगिंग के दौरान सामना करना पड़ा।Control.EndInvoke अपवाद के लिए कॉल स्टैक रीसेट करता है
अगर हम एंडिनोक को एसिंक प्रतिनिधि पर कॉल करते हैं। विधि को फिर से फेंकने के दौरान हमें कोई अपवाद फेंक दिया जाएगा। कॉल स्टैक अपवाद के मूल स्रोत को प्रतिबिंबित करेगा।
हालांकि, अगर हम Windows.Forms.Control पर कुछ ऐसा करते हैं, तो Control.EndInvoke का कार्यान्वयन कॉल स्टैक को रीसेट करता है। यह एक साधारण परीक्षण या परावर्तक में कोड को देखकर देखा जा सकता है। EndInvoke से प्रासंगिक कोड अंश यहाँ है:
if (entry.exception != null)
{
throw entry.exception;
}
मैं समझता हूँ कि शुरू/EndInvoke नियंत्रण और async प्रतिनिधियों पर अलग हैं, लेकिन मैं Control.EndInvoke पर समान व्यवहार की उम्मीद है।
क्या कोई कारण है नियंत्रण नियंत्रण नहीं करता है जो एसिंक प्रतिनिधि मूल कॉल स्टैक को संरक्षित करने के लिए करते हैं?
मुझे पता है, लेकिन जब से मैं एक है जो लागू नहीं किया हूँ Windows.Forms.Control यह थोड़ी मदद की है। –