猿问

如何在C#控制台应用程序中捕获ctrl-c(SIGINT)

我希望能够在C#控制台应用程序中捕获CTRLC,以便可以在退出前进行一些清理。最好的方法是什么?



慕田峪4524236
浏览 1370回答 3
3回答

HUH函数

该Console.CancelKeyPress事件被用于此目的。使用方法如下:public static void Main(string[] args){    Console.CancelKeyPress += delegate {        // call methods to clean up    };    while (true) {}}当用户按Ctrl + C时,将运行委托中的代码,并退出程序。这使您可以通过调用necessairy方法来执行清理。请注意,执行委托后没有任何代码。在其他情况下,这也无法解决。例如,如果程序当前正在执行无法立即停止的重要计算。在这种情况下,正确的策略可能是在计算完成后告诉程序退出。以下代码给出了如何实现的示例:class MainClass{    private static bool keepRunning = true;    public static void Main(string[] args)    {        Console.CancelKeyPress += delegate(object sender, ConsoleCancelEventArgs e) {            e.Cancel = true;            MainClass.keepRunning = false;        };        while (MainClass.keepRunning) {            // Do your work in here, in small chunks.            // If you literally just want to wait until ctrl-c,            // not doing anything, see the answer using set-reset events.        }        Console.WriteLine("exited gracefully");    }}此代码与第一个示例之间的差异e.Cancel是设置为true,这意味着在委托之后继续执行。如果运行,程序将等待用户按Ctrl +C。在这种情况下,keepRunning变量会更改值,从而导致while循环退出。这是使程序正常退出的一种方式。
随时随地看视频慕课网APP
我要回答