我正在查看在我的控制台应用程序运行时按下了哪些键盘按钮和组合。
我想要做的其中一件事是在控制台应用程序中捕获Ctrl + C,这样它就不会退出,而是做一些整理和优雅关闭。
感谢您提供的任何帮助
答案 0 :(得分:1)
如果您在Unix / Linux下运行,请使用Mono.UnixSignal
我在我的Linux应用程序上使用它。优点是它还可以检测重启或系统关闭。
此示例来自this Mono FAQ page
// Catch SIGINT and SIGUSR1
UnixSignal[] signals = new UnixSignal [] {
new UnixSignal (Mono.Unix.Native.Signum.SIGINT),
new UnixSignal (Mono.Unix.Native.Signum.SIGUSR1),
};
Thread signal_thread = new Thread (delegate () {
while (true) {
// Wait for a signal to be delivered
int index = UnixSignal.WaitAny (signals, -1);
Mono.Unix.Native.Signum signal = signals [index].Signum;
// Notify the main thread that a signal was received,
// you can use things like:
// Application.Invoke () for Gtk#
// Control.Invoke on Windows.Forms
// Write to a pipe created with UnixPipes for server apps.
// Use an AutoResetEvent
// For example, this works with Gtk#
Application.Invoke (delegate () { ReceivedSignal (signal); }
});
答案 1 :(得分:0)
您可以使用Console.CancelKeyPress
event。
此事件与。一起使用 System.ConsoleCancelEventHandler和System.ConsoleCancelEventArgs。 CancelKeyPress事件使控制台应用程序能够拦截 CTRL + C信号,以便应用程序可以决定是否继续 执行或终止。