代码之家  ›  专栏  ›  技术社区  ›  Alan

C控制台应用程序:防止打印Control-C?

  •  5
  • Alan  · 技术社区  · 16 年前

    我有一个控制台应用程序,我想捕获Control-C并优雅地关闭。

    我有以下代码:

    Console.CancelKeyPress += new ConsoleCancelEventHandler((o, e) =>
    {
       Logger.Log("Control+C hit. Shutting down.");
       resetEvent.Set();
    });
    

    输出窗口显示:

    2010年6月16日下午3:24:34:control+c点击。关闭。
    ^ C

    有没有办法阻止control-c字符 ^C 不会出现?它不是一个 巨大的 好吧,但出于某种原因,我会一直盯着它,因为我是那样的肛门。

    3 回复  |  直到 16 年前
        1
  •  3
  •   João Angelo    16 年前

    作为控制台应用程序,我将使用 Environment.Exit 以表示应用程序正在退出,并以此方式停止 ^C 不会被打印出来。

    您甚至可以提供一个特定的错误代码来表示用户按下 CTRL+C .

    static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
    {
        Console.WriteLine("Control+C hit. Shutting down."); 
    
        Environment.Exit(-1);
    }
    
        2
  •  2
  •   Ioannis Karadimas    16 年前

    这应该有效…

    Console.CancelKeyPress += new ConsoleCancelEventHandler((o, e) =>
    {
        Console.WriteLine("Control+C hit. Shutting down.");
        Environment.Exit(0);
    });
    
    Console.ReadLine();
    
        3
  •  0
  •   anchandra    16 年前

    虽然这不一定是您要实现的解决方案,但它确实会阻止显示^C:

    static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
    {
        Console.WriteLine("Control+C hit. Shutting down.");     
        Process.GetCurrentProcess().Kill();
    }