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(); // 保持控制台窗口打开,直到用户按下按键 }
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!