سؤال

لدي تطبيق وحدة التحكم في C #. إذا حدث خطأ ما، فأنا أسمي Environment.Exit() لإغلاق طلبي. أحتاج إلى قطع الاتصال من الخادم وإغلاق بعض الملفات قبل انتهاء التطبيق.

في جاوة، يمكنني تنفيذ خطاف إيقاف التشغيل وتسجيله عبر Runtime.getRuntime().addShutdownHook(). وبعد كيف يمكنني تحقيق نفس الشيء في C #؟

هل كانت مفيدة؟

المحلول

يمكنك إرفاق معالج الأحداث إلى حدث ProcessExit نطاق التطبيق الحالي:

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

نصائح أخرى

صنارة صيد 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)
{
}

أوصي بتفويل المكالمة إلى Environment.exit () في طريقتك الخاصة واستخدام ذلك طوال الوقت. شيء من هذا القبيل:

internal static void MyExit(int exitCode){
    // disconnect from network streams
    // ensure file connections are disposed
    // etc.
    Environment.Exit(exitCode);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top