मैं एक WinForm
आवेदन C#
जहाँ मैं Program.cs
में एक try-catch
ब्लॉक डाल दिया, कार्यक्रम प्रविष्टि में में लिखा, static void Main
विधि है, है ना इस तरह आवेदन की शुरुआत में है:क्या सी # WinForm स्थिर शून्य मुख्य अपवाद को पकड़ नहीं सकता है?
using System;
using System.IO;
using System.Windows.Forms;
namespace T5ShortestTime {
static class Program {
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
try {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new T5ShortestTimeForm());
} catch (Exception e) {
string errordir = Path.Combine(Application.StartupPath, "errorlog");
string errorlog = Path.Combine(errordir, DateTime.Now.ToString("yyyyMMdd_HHmmss_fff") + ".txt");
if (!Directory.Exists(errordir))
Directory.CreateDirectory(errordir);
File.WriteAllText(errorlog, e.ToString());
}
}
}
}
आप देख सकते हैं , Application
को try-catch
ब्लॉक में रखा गया है और catch
ब्लॉक में, एकमात्र चीज यह है कि त्रुटि लॉग फ़ाइल बनाना है।
अब, अब तक बहुत अच्छा है। मेरा आवेदन अच्छी तरह से चल रहा है और यदि मुझे कोई दुर्घटना आती है, तो अंतिम Exception
को try-catch
ब्लॉक द्वारा कैप्चर किया जाना चाहिए और त्रुटि लॉग फ़ाइल में संग्रहीत किया जाना चाहिए।
लेकिन, जैसा कि मैं थोड़ी देर के लिए मेरा कार्यक्रम चलाने के लिए, मैं एक बिना क्रिया का अपवाद (null
संदर्भ) मिलता है। मुझे आश्चर्य है कि अपवाद त्रुटि लॉग फ़ाइल नहीं बनाता है।
अब, this post से पता चलता है कि यह संभवतः ThreadException
या HandleProcessCorruptedStateExceptions
(दो सबसे upvoted जवाब) के कारण होता है, लेकिन मेरे मामले एक सरल null
संदर्भ अपवाद पता चलता है:
Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01: T5ShortestTime.exe
Problem Signature 02: 2.8.3.1
Problem Signature 03: 5743e646
Problem Signature 04: T5ShortestTime
Problem Signature 05: 2.8.3.1
Problem Signature 06: 5743e646
Problem Signature 07: 182
Problem Signature 08: 1b
Problem Signature 09: System.NullReferenceException
OS Version: 6.3.9600.2.0.0.272.7
Locale ID: 1033
Additional Information 1: bb91
Additional Information 2: bb91a371df830534902ec94577ebb4a3
Additional Information 3: aba1
Additional Information 4: aba1ed7202d796d19b974eec93d89ec2
Read our privacy statement online:
http://go.microsoft.com/fwlink/?linkid=280262
If the online privacy statement is not available, please read our privacy statement offline:
C:\Windows\system32\en-US\erofflps.txt
कि क्यों हो सकता है?
ऐसा नहीं है कि आप वैश्विक अपवाद हैंडलर कैसे बनाते हैं। 'लिंक' अनुभाग में, इस पृष्ठ के दाईं ओर देखें। स्वीकार्य उत्तर आपको बताता है कि क्या करना है। – jmcilhinney
@jmcilhinney आपका मतलब 'थ्रेडएक्सप्शन' है? – Ian
उदाहरण में, // एक नया धागा शुरू करें, विंडोज फॉर्म से अलग, जो अपवाद फेंक देगा। 'निजी शून्य बटन 2_Click (ऑब्जेक्ट प्रेषक, System.EventArgs ई) { थ्रेडस्टार्ट newThreadStart = नया थ्रेडस्टार्ट (newThread_Execute); नया थ्रेड = नया थ्रेड (नया थ्रेडस्टार्ट); newThread.Start(); } 'जो जानबूझकर एक नए धागे में अपवाद को संभालता है। लेकिन क्या यह 'थ्रेडएक्सप्शन' के बजाय 'शून्य' संदर्भ अपवाद (मेरे मामले की तरह) बनाता है (यह इस प्रकार होना चाहिए - है ना?)? – Ian