【发布时间】:2016-06-24 02:11:44
【问题描述】:
当我在控制台窗口中单击 ctrl+c 时,会引发事件并且应用程序可以执行一些应该在退出之前执行的代码。
但是,当我单击 [X] 关闭按钮时,也会引发事件,但在短时间内,我的应用程序被我强行关闭 - 当“结束执行”事件仍在进行中时。
是否可以在windows强制关闭应用程序之前设置更长的超时时间?
编辑:
我设置:
[DllImport("Kernel32.dll")]
static extern bool SetConsoleCtrlHandler(ControlEventHandler e, bool add);
public delegate void ControlEventHandler(ConsoleEvent consoleEvent);
当我在控制台窗口单击 ctrl+c 时,我收到:CTRL_C,我可以在 mu 事件处理程序中处理代码。
当我单击 [x] 关闭按钮时,我收到 CTRL_CLOSE 标志,我也可以处理处理程序,但只能处理 1-2 秒。然后控制台windwo消失...
【问题讨论】:
-
请出示您的代码。我不认为它正在做你认为它正在做的事情。
-
你为什么使用互操作而不是:
Console.CancelKeyPress? msdn.microsoft.com/en-us/library/… -
您无法阻止用户关闭控制台窗口。在程序终止之前,你得到回调来做一些有用的事情,仅此而已。一旦你从回调中返回或花费太长时间来做有用的事情,操作系统就会介入并杀死窗口。功能,而不是错误。
-
@AndyJ:我正在处理现有代码(无法更改,它是只读存储库)。@HansPassant:所以没有选项可以更改 [x] 点击和应用程序终止之间的延迟?