Событие выхода из консоли длится всего 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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