Как я могу сохранить консоль открытой, пока событие CancelKeyPress не запущено?

Чтобы сопоставить все до, но не включая, /?:

.*(?=/\?)

Если вы не уверены в возможности побега, вы можете использовать класс символов, чтобы выполнить побег за вас: [ 114]

.*(?=/[?])
9
задан Eric Schoonover 14 October 2008 в 23:47
поделиться

4 ответа

Я предполагаю, что "корректно закрывается, приложение" является частью, с которой Вы боретесь здесь. Иначе Ваше приложение автоматически выйдет на ctrl-c. Необходимо изменить заголовок.

Вот быстрая демонстрация того, что я думаю, что Вам нужно. Это могло быть усовершенствовано немного больше с использованием блокировки и Мониторов для уведомления. Я не уверен точно, в чем Вы нуждаетесь, хотя, таким образом, я просто изложу это...

class Program
{

    private static volatile bool _s_stop = false;

    public static void Main(string[] args)
    {
        Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
        while (!_s_stop)
        {
            /* put real logic here */
            Console.WriteLine("still running at {0}", DateTime.Now);
            Thread.Sleep(3000);
        }
        Console.WriteLine("Graceful shut down code here...");

        //don't leave this...  demonstration purposes only...
        Console.ReadLine();
    }

    static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
    {
        //you have 2 options here, leave e.Cancel set to false and just handle any
        //graceful shutdown that you can while in here, or set a flag to notify the other
        //thread at the next check that it's to shut down.  I'll do the 2nd option
        e.Cancel = true;
        _s_stop = true;
        Console.WriteLine("CancelKeyPress fired...");
    }

}

_s_stop булевская переменная должна быть объявлена энергозависимая, или чрезмерно амбициозный оптимизатор мог бы заставить программу циклично выполняться бесконечно.

11
ответ дан 4 December 2019 в 11:45
поделиться

Это может быть тем, что Вы ищете:

http://msdn.microsoft.com/en-us/library/system.console.cancelkeypress.aspx

1
ответ дан 4 December 2019 в 11:45
поделиться

Уже существует обработчик, связанный с CancelKeyPress, который завершает Ваше приложение, единственная причина сцепиться с ним состоит в том, если Вы хотите прервать событие и препятствовать тому, чтобы приложение закрылось.

В Вашей ситуации, просто помещает Ваше приложение в бесконечный цикл и позволяют созданному в обработчике событий уничтожить его. Можно хотеть изучить использование, чему-то нравится, Ожидают (1) или фоновый процесс, чтобы препятствовать тому, чтобы он использовал тонны ЦП, ничего не делая.

1
ответ дан 4 December 2019 в 11:45
поделиться

Логическое значение _s_stop должно быть объявлено изменчивым в примере кода, иначе чрезмерно амбициозный оптимизатор может вызвать бесконечный цикл программы.

5
ответ дан 4 December 2019 в 11:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: