यह previous question से संबंधित है।ऐपडोमेन अपवाद हमेशा आवेदन को समाप्त क्यों करते हैं?
जो मैं अब समझने की कोशिश कर रहा हूं यह है कि यूआई थ्रेड अपवादों को एप्लिकेशन को समाप्त करने से कैसे रोका जा सकता है जबकि गैर-यूआई अपवाद नहीं हो सकते हैं।
संदर्भ के लिए, this example देखें।
सबसे महत्वपूर्ण बात यह है कि मैं उस मामले में "चुपचाप" प्रक्रिया को समाप्त कर सकता हूं - विंडोज संवाद बॉक्स को प्रदर्शित किए बिना पूछता है कि मैं एक त्रुटि रिपोर्ट भेजना चाहता हूं या नहीं।
यह मेरा AppDomain UnhandledExceptionHandler है:
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
// Maybe do some logging here if allowed
}
catch
{
}
// then just terminate the application
Application.Exit();
}
अद्यतन
this answer में टिप्पणी के प्रकाश में, मैं स्पष्ट करना है कि सबसे महत्वपूर्ण बात मैं तंत्र के बारे में और अधिक जानकारी प्राप्त करना चाहते हैं करना चाहते हैं कि यूआई थ्रेड को Application.ThreadException
तंत्र के माध्यम से अनचाहे अपवादों को पकड़ने का प्रारंभिक अवसर प्राप्त करने में सक्षम बनाता है। और क्या ऐसा व्यवहार गैर-यूआई थ्रेड पर लागू किया जा सकता है।
@Reed अपने आवेदन के लिए .NET JIT डीबगिंग संवाद निष्क्रिय करने के लिए एक तरह से इसमें रुचि है: "यूआई सूत्र में बिना क्रिया के अपवाद ही कारण होगा होने वाली बात। " - यह सच नहीं है। कृपया एक परीक्षण आवेदन बनाएं और इसे अपने लिए आज़माएं। –
तकनीकी रूप से, मुझे "मुख्य धागे पर अनचाहे अपवाद" कहा जाना चाहिए था। विंडोज फॉर्म यूआई थ्रेड पर अपना अपवाद हैंडलिंग व्यवहार जोड़ता है (क्योंकि यह पूरी तरह से यूआई थ्रेड पर चल रहा है) जो मुख्य धागे के व्यवहार को बदलता है। एक कंसोल एप्लिकेशन बनाएं, और इसे आज़माएं, और आप देखेंगे कि इससे कोई फर्क नहीं पड़ता कि थ्रेड चीजें क्या होती हैं - वे सभी एप्लिकेशन को फाड़ देंगे। –
फिर मुझे अपना प्रश्न बहाल करना चाहिए: UI थ्रेड कैसे इसे सामान्य अपवाद हैंडलिंग व्यवहार को पूरा करता है? क्या मैं कुछ गैर-यूआई थ्रेड के व्यवहार के रूप में दोहराना चाहता हूं? –