我有一个包含很多线程的控制台应用程序。有些线程监视某些条件并在满足条件时终止程序。这种终止可能随时发生。
我需要一个可以在程序关闭时触发的事件,以便我可以清理所有其他线程并正确关闭所有文件句柄和连接。我不确定 .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);
...
}
Update
对于那些没有检查评论的人来说,这个特定的解决方案似乎确实not工作良好(或根本)Windows 7的。下列thread谈论这个
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)