2009-12-03 22 views
7

मेरे पास सी # में एक कंसोल एप्लिकेशन है। अगर कुछ गलत हो जाता है, तो मैं अपने आवेदन को बंद करने के लिए Environment.Exit() पर कॉल करता हूं। मुझे सर्वर से डिस्कनेक्ट करने और एप्लिकेशन समाप्त होने से पहले कुछ फ़ाइलों को बंद करने की आवश्यकता है।पर्यावरण से पहले ईवेंट कैसे कॉल करें। एक्सिट()?

जावा में, मैं शट डाउन हुक को कार्यान्वित कर सकता हूं और इसे Runtime.getRuntime().addShutdownHook() के माध्यम से पंजीकृत कर सकता हूं। मैं सी # में इसे कैसे प्राप्त कर सकता हूं?

उत्तर

18

आप वर्तमान आवेदन डोमेन के ProcessExit घटना के लिए एक ईवेंट हैंडलर संलग्न कर सकते हैं:

using System; 
class Program 
{ 
    static void Main(string[] args) 
    { 
     AppDomain.CurrentDomain.ProcessExit += (s, e) => Console.WriteLine("Process exiting"); 
     Environment.Exit(0); 
    } 
} 
+1

लायक है मुझे लैम्ब्डा पसंद नहीं है :)। लेकिन धन्यवाद, बीमार कोशिश करो। – Makah

-2

मैं अपनी खुद की विधि में पर्यावरण को निष्पादित करने की सलाह दूंगा। कुछ इस तरह:

internal static void MyExit(int exitCode){ 
    // disconnect from network streams 
    // ensure file connections are disposed 
    // etc. 
    Environment.Exit(exitCode); 
} 
+0

सी # एक निकास में मौजूद नहीं है घटना? – Makah

+1

-1: यह महत्वपूर्ण रूप से युग्मन को बढ़ाता है जब चीजों को इसके बिना काम करने के अन्य * आसान * तरीके होते हैं: http://en.wikipedia.org/wiki/Coupling_(computer_science) –

+0

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

9

हुक AppDomain घटनाओं:

private static void Main(string[] args) 
{ 
    var domain = AppDomain.CurrentDomain; 
    domain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler); 
    domain.ProcessExit += new EventHandler(domain_ProcessExit); 
    domain.DomainUnload += new EventHandler(domain_DomainUnload); 
} 
static void MyHandler(object sender, UnhandledExceptionEventArgs args) 
{ 
    Exception e = (Exception)args.ExceptionObject; 
    Console.WriteLine("MyHandler caught: " + e.Message); 
} 

static void domain_ProcessExit(object sender, EventArgs e) 
{ 
} 
static void domain_DomainUnload(object sender, EventArgs e) 
{ 
} 
संबंधित मुद्दे