Подтвердить что ты не робот

Запуск приложения Windows Console (требуется клавиша нажатия)

У меня есть консольная программа, которая имеет разные компоненты, которые работают следующим образом:

void start() {
while(true){
     DoSomething();
     Thread.Sleep(1000*5);
}
}

Моя основная точка входа выглядит как [псевдо-йэш-код]

Thread.Start(Componenet1.Start);
Thread.Start(Componenet2.Start);

while(true){
     Console.Writeline("running");
     Thread.Sleep(1000*5);
}

Консоли отсутствуют. Где угодно. Моя проблема - ИНОГДА, приложение будет работать отлично, но затем остановится, и если я нажму любую клавишу в окне, он снова начнет работать. Это происходит довольно редко, но у меня есть эта программа, развернутая на 100+ виртуальных машинах, работающих круглосуточно в автоматизированной среде.

Также на компьютере у меня есть некоторые скрипты AHK и другие вещи, которые манипулируют мышью, но не уверены, что это имеет к этому какое-то отношение.

Также обратите внимание, что иногда процессор может действительно работать на 100% на машинах, поэтому, возможно, приоритет потока является проблемой?

РЕШЕНИЕ: вам нужно отключить режим быстрого редактирования. Здесь используется код С# для этого:

 // http://msdn.microsoft.com/en-us/library/ms686033(VS.85).aspx
    [DllImport("kernel32.dll")]
    public static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);

    private const uint ENABLE_EXTENDED_FLAGS = 0x0080;

    static void Main(string[] args)
    {
         IntPtr handle = Process.GetCurrentProcess().MainWindowHandle;
         SetConsoleMode(handle, ENABLE_EXTENDED_FLAGS);
4b9b3361

Ответ 1

Если пользователь случайно щелкнет в черном окне консоли, курсор изменится на заполненный белый прямоугольник, и приложение зависает в следующем операторе Console.Write, пока не будет создан другой клик.

Это общая функция окна консоли, когда включен режим "QuickEdit Mode".

Чтобы отключить эту функцию, вы должны снять флажок "Режим QuickEdit Mode" в окне консоли приложения во время выполнения.