Событие выхода из консоли длится всего 5 секунд.C#

Место общения программистов C#
Anonymous
Событие выхода из консоли длится всего 5 секунд.

Сообщение Anonymous »

Мне нужно вызвать некоторые функции, чтобы остановить некоторые процессы, нажав кнопку выхода из консоли и любую другую комбинацию клавиш.
Я пытался использовать метод SetConsoleCtrlHandler, но вызываемые функции через этот обработчик не успевает завершиться, потому что уже через 5 секунд основной процесс автоматически закрывается.
Есть ли решение, которое гарантирует, что у каждого метода, вызываемого после закрытия консоли, будет достаточно времени для завершения, а не только 5 секунд?
Ниже код, который я использую:
using System.Runtime.InteropServices;

namespace ConsoleApp1
{
public class Test
{
[DllImport("Kernel32")]
private static extern bool SetConsoleCtrlHandler(SetConsoleCtrlEventHandler handler, bool add);

private delegate bool SetConsoleCtrlEventHandler(CtrlType sig);

private 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 signal)
{
switch (signal)
{
case CtrlType.CTRL_BREAK_EVENT:
case CtrlType.CTRL_C_EVENT:
case CtrlType.CTRL_LOGOFF_EVENT:
case CtrlType.CTRL_SHUTDOWN_EVENT:
case CtrlType.CTRL_CLOSE_EVENT:
Console.WriteLine("Closing");
// TODO Cleanup resources
while (true) { Thread.Sleep(100); }
Environment.Exit(0);
return false;

default:
return false;
}
}

public static void Main(string[] args)
{
// Register the handler
SetConsoleCtrlHandler(Handler, true);

while (true)
{
Thread.Sleep(50);
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... -5-seconds

Вернуться в «C#»