gpt4 book ai didi

c# - 捕获控制台退出 C#

转载 作者:行者123 更新时间:2023-11-30 18:18:41 24 4
gpt4 key购买 nike

我有一个包含很多线程的控制台应用程序。有些线程监视某些条件并在它们为真时终止程序。这种终止可能随时发生。

我需要一个可以在程序关闭时触发的事件,以便我可以清理所有其他线程并正确关闭所有文件句柄和连接。我不确定 .NET 框架中是否已经内置了一个,所以我在编写自己的框架之前先询问一下。

我想知道是否有这样的事件:

MyConsoleProgram.OnExit += CleanupBeforeExit;

最佳答案

我不确定我在网上的什么地方找到了代码,但我现在在我的一个旧项目中找到了它。这将允许您在控制台中执行清理代码,例如当它突然关闭或由于关机...

[DllImport("Kernel32")]
private static extern bool SetConsoleCtrlHandler(EventHandler handler, bool add);

private delegate bool EventHandler(CtrlType sig);
static EventHandler _handler;

enum CtrlType
{
CTRL_C_EVENT = 0,
CTRL_BREAK_EVENT = 1,
CTRL_CLOSE_EVENT = 2,
CTRL_LOGOFF_EVENT = 5,
CTRL_SHUTDOWN_EVENT = 6
}

private static bool Handler(CtrlType sig)
{
switch (sig)
{
case CtrlType.CTRL_C_EVENT:
case CtrlType.CTRL_LOGOFF_EVENT:
case CtrlType.CTRL_SHUTDOWN_EVENT:
case CtrlType.CTRL_CLOSE_EVENT:
default:
return false;
}
}


static void Main(string[] args)
{
// Some biolerplate to react to close window event
_handler += new EventHandler(Handler);
SetConsoleCtrlHandler(_handler, true);
...
}

更新

对于那些不检查评论的人来说,这个特定的解决方案似乎不能Windows 7 上运行良好(或根本无法运行)。以下thread谈这个

关于c# - 捕获控制台退出 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40767148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com