Глиф Учебники

Как сделать паузу в консоли — окно закрывается сразу

Справочник · C# · 2 минуты чтения

Если окно программы мелькает и сразу закрывается, добавьте в конец ожидание клавиши:

C#
Console.WriteLine("Готово");
Console.WriteLine("Нажмите любую клавишу...");
Console.ReadKey();

Console.ReadKey() ждёт нажатия любой клавиши, Console.ReadLine() — нажатия Enter. Пока ожидание не закончилось, окно остаётся открытым, и вывод можно прочитать. Console.ReadKey(true) не печатает нажатую клавишу на экране.

Когда окно закрывается

Консольная программа работает, пока выполняются её команды. Кончились команды — программа завершилась, и окно, которое Windows открыла специально для неё, закрывается. Так бывает, когда .exe запускают двойным щелчком из папки bin\Debug\net10.0. Если же программу запускают из уже открытого терминала (dotnet run в PowerShell), терминал остаётся, и пауза не нужна.

Visual Studio

Запускайте программу через Ctrl+F5 (запуск без отладки): после её завершения окно ждёт клавишу само. При запуске с отладкой (F5) окно тоже остаётся открытым, если в настройках выключен параметр Automatically close the console when debugging stops (Tools → Options → Debugging → General). По умолчанию он выключен, и в конце вывода появляется строка Press any key to close this window . . ..

Задержка на несколько секунд

Если нужна не остановка до нажатия, а пауза на время — Thread.Sleep (время в миллисекундах):

C#
for (int i = 3; i > 0; i--)
{
    Console.WriteLine(i);
    Thread.Sleep(1000);
}
Console.WriteLine("Старт!");
Вывод
3
2
1
Старт!

Между строками проходит по секунде. В программе без Main можно писать и await Task.Delay(1000); — это вариант для асинхронного кода (кода с await, который на время ожидания отпускает поток выполнения и не держит его занятым впустую). Длительность можно задать и через TimeSpan: Thread.Sleep(TimeSpan.FromSeconds(1.5));.

Подводные камни