3 回答
TA贡献1836条经验 获得超4个赞
该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循环退出。这是使程序正常退出的一种方式。
- 3 回答
- 0 关注
- 1369 浏览
添加回答
举报