Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh mengendalikan acara keluar konsol dengan anggun di C#?

Bagaimanakah saya boleh mengendalikan acara keluar konsol dengan anggun di C#?

Susan Sarandon
Lepaskan: 2025-01-28 10:07:12
asal
999 orang telah melayarinya

How Can I Gracefully Handle Console Application Exit Events in C#?

Tangkap permohonan konsol di C#untuk keluar dari insiden

Dalam aplikasi konsol berbilang, penamatan program lancar mungkin menjadi cabaran. Sesetengah benang boleh memantau keadaan tertentu dan memulakan program yang ditutup pada bila -bila masa. Untuk memastikan pembersihan dan pelepasan sumber yang betul, pemaju biasanya mencari peristiwa terbina yang dicetuskan sebelum penutupan program.

Kaedah untuk menangkap penarikan konsol adalah untuk memproses prosedur melalui peristiwa tersuai. Menggunakan fungsi

API Windows, anda boleh memasang program pemprosesan acara untuk memintas pelbagai acara keluar, seperti penutupan, penutupan atau gangguan pengguna.

SetConsoleCtrlHandler Serpihan kod berikut menunjukkan teknologi ini:

Kaedah

menyediakan kaedah penapisan jenis peristiwa yang harus mencetuskan kod pembersihan. Dalam contoh ini, kami mengendalikan penutupan konsol, penutupan sistem, dan gangguan pengguna (CTRL C). Perhatikan bahawa menunjukkan bahawa isyarat keluar telah berjaya diproses, dan prosedur dibenarkan keluar dengan elegan;
[DllImport("Kernel32")]
private static extern bool SetConsoleCtrlHandler(EventHandler handler, bool add);

private delegate bool EventHandler(CtrlType sig);
static EventHandler _handler;

enum CtrlType
{
    CTRL_C_EVENT = 0,
    CTRL_BREAK_EVENT = 1,
    CTRL_CLOSE_EVENT = 2,
    CTRL_LOGOFF_EVENT = 5,
    CTRL_SHUTDOWN_EVENT = 6
}

private static bool Handler(CtrlType sig)
{
    //在此处添加您的清理代码
    switch (sig)
    {
        case CtrlType.CTRL_C_EVENT:
        case CtrlType.CTRL_LOGOFF_EVENT:
        case CtrlType.CTRL_SHUTDOWN_EVENT:
        case CtrlType.CTRL_CLOSE_EVENT:
            //执行清理操作
            Console.WriteLine("执行清理操作...");
            return true; //表示已处理事件
        default:
            return false; //表示未处理事件
    }
}

static void Main(string[] args)
{
    // 注册事件处理程序
    _handler += new EventHandler(Handler);
    SetConsoleCtrlHandler(_handler, true);
    //  ...您的应用程序主代码...
    Console.WriteLine("程序运行中...");
    Console.ReadKey(); // 保持控制台窗口打开,直到用户按下按键
}
Salin selepas log masuk

Perlu diingat bahawa penyelesaian ini mungkin menghadapi sekatan pada sistem pengendalian tertentu (terutama Windows 7). Sekiranya anda menghadapi masalah, sila rujuk kaedah keluar dari insiden sumber dalam talian dan konsol pemprosesan lain. Untuk memastikan keteguhan kod, adalah disyorkan untuk menambah mekanisme pemprosesan ralat ke kaedah Handler, seperti blok percubaan untuk menangkap kelainan yang mungkin. return true;

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengendalikan acara keluar konsol dengan anggun di C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan