我正在启动我的控制台应用程序:
static void Main(string[] args)
{
Console.CancelKeyPress += ConsoleCancelKeyPress;
LaunchOtherComponent();
Console.Read();
Cleanup();
}
private static void ConsoleCancelKeyPress(object src, ConsoleCancelEventArgs consoleEvent)
{
if (cancelKeyPressed)
{
Log.Fatal("User pressed ctrl-c twice, forcing hard process termination.");
consoleEvent.Cancel = false;
}
else
{
Log.Info("User pressed ctrl-c we just ignore it...");
//I REALLY want this log!
Thread.Sleep(5000);
cancelKeyPressed = consoleEvent.Cancel = true;
}
}
我的问题是,似乎我的回调从未被调用,因为在LaunchOtherComponent
其他类正在注册到Ctrl + C信号并退出应用程序(在另一个库中甚至可能在C ++中)。所以清理永远不会被称为......
我认为,因为我是第一个注册的人,我将是第一个被调用的人。为什么不是这样?
然后我在LaunchOtherComponent
之后将我的注册移动到处理程序并且它可以工作。
有没有更清洁的方法来解决这个问题?