2010-07-09 6 views
20

AppDomain.UnhandledException और .NET में Application.DispatcherUnhandledException के बीच क्या अंतर है?अंतर

मुझे किसी ऐसे ईवेंट की आवश्यकता है जिसे किसी भी अनचाहे अपवाद के दौरान निकाल दिया जाए। मैं इन दोनों में आया हूं, लेकिन मुझे नहीं पता कि वे एक-दूसरे से अलग-अलग तरीके से अलग हैं। साथ ही, क्या ऐसे मामले हैं जब उन्हें निकाल दिया नहीं जाता है?

उत्तर

11

Application.DispatcherUnhandledException एक WPF अनुप्रयोग में मुख्य यूआई थ्रेड पर फेंकने वाले अपवादों को संभालेगा। AppDomain.UnhandledException किसी भी धागे पर फेंकने वाले अपवादों को संभालेगा और कभी पकड़ा नहीं जाएगा। इसमें आपके द्वारा मैन्युअल रूप से बनाए गए थ्रेड या कंसोल एप्लिकेशन में मुख्य थ्रेड शामिल है। डब्ल्यूपीएफ यूआई थ्रेड पर अपवादों को पकड़ रहा है, इसलिए आप उन्हें AppDomain.UnhandledException में नहीं देख पाएंगे।

यह भी ध्यान रखें कि अनचाहे अपवाद आमतौर पर रनटाइम को समाप्त करते हैं, इसलिए AppDomain.UnhandledException उठाए जाने के बाद आपका प्रोग्राम तुरंत बाहर निकल जाएगा। इसके विपरीत, Application.DispatcherUnhandledException अपवादों को पकड़ रहा है और आपके कार्यक्रम को जारी रखेगा।

+7

वास्तव में जब आवेदन। डिस्पैचर अननहेल्ड अपवाद का उपयोग नहीं किया जाता है, तो वे अपवाद ऐपडोमेन में दिखाई देंगे। अनचाहे अपवाद, और एप्लिकेशन तुरंत बाहर निकल जाएगा। – stijn

+0

अपवाद पकड़ा और संभाला जाता है तो आवेदन मौजूद नहीं होगा।उत्तर और टिप्पणी दोनों का अर्थ यह है कि आवेदन किसी भी तरह से बाहर निकल जाएगा जो गलत है। – vikp

2

http://msdn.microsoft.com/en-us/library/system.windows.application.dispatcherunhandledexception.aspx

का कहना है:

"DispatcherUnhandledException प्रत्येक अपवाद है कि मुख्य यूआई धागा पर चल रहा कोड द्वारा बिना क्रिया है के लिए एक आवेदन द्वारा उठाया जाता है।"

http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

का कहना है:

"यह घटना किसी भी आवेदन डोमेन संभाला जा सकता है हालांकि, घटना जरूरी आवेदन डोमेन जहां अपवाद घटित में नहीं उठाया गया है।।"

तो डिस्पैचर अननहेल्ड अपवाद यूआई थ्रेड अपवादों के लिए है, और AppDomain.UnhandledException बाकी सब कुछ के लिए है।

आशा है कि मदद करता है!

8

डिस्पैचर अननहेल्ड अपवाद केवल यूआई थ्रेड द्वारा उठाया जाता है और केवल एक ईवेंट चलाने के दौरान अपवाद उठाया जाता है। इस तरह के अपवादों को विशेष रूप से संभालने के लिए एक परंपरा है, विंडोज़ फॉर्म में यह भी एप्लीकेशन के साथ है। थ्रेडएक्सप्शन (खराब नाम, थ्रेड के साथ कुछ भी नहीं)।

कारण यह है कि अपवाद को संभालने और प्रोग्राम को जिंदा रखने के लिए मामूली मौका है क्योंकि यूआई इवेंट हैंडलर हमेशा नाटकीय रूप से प्रोग्राम की स्थिति को हमेशा परिवर्तित नहीं करते हैं। यह इच्छापूर्ण सोच की बड़ी मदद लेता है। विंडोज फॉर्म इसे चरम पर ले जाता है, यह एक थ्रेडएक्सप्शनडियलॉग प्रदर्शित करता है जिसमें एक जारी बटन है, जिससे उपयोगकर्ता अपवाद को अनदेखा कर सकता है। डब्ल्यूपीएफ ऐसा नहीं करता है, आपको खुद को एक संवाद लिखना होगा। यही कारण है कि घटना है।

DispatcherUnhandledException की डिफ़ॉल्ट कार्रवाई अपवाद को पकड़ना नहीं है। तो आप इसे अनदेखा करने के लिए ठीक हैं, AppDomain.UnhandledException अगली आग लग जाएगी।