Я изучаю C #, следуя инструкциям в MSDN .
Теперь я только что попробовал Пример 1 ( здесь ссылка на MSDN ), и я столкнулся с проблемой: почему окно консоли закрывается сразу после отображения моего вывода?
using System;
public class Hello1
{
public static int Main()
{
Console.WriteLine("Hello, World!");
return 0;
}
}
c#
.net
console-application
msdn
user962206
источник
источник
Ответы:
Потому что это закончено. Когда консольные приложения завершат выполнение и вернутся из своего
main
метода, соответствующее консольное окно автоматически закроется. Это ожидаемое поведение.Если вы хотите, чтобы он оставался открытым для целей отладки, вам нужно будет дать компьютеру команду подождать нажатия клавиши, прежде чем завершать работу приложения и закрывать окно.
Console.ReadLine
Метод является одним из способов сделать это. Добавление этой строки в конец кода (непосредственно передreturn
оператором) приведет к тому, что приложение будет ждать, пока вы нажмете клавишу, прежде чем выйти.В качестве альтернативы, вы можете запустить приложение без подключенного отладчика, нажав « Ctrl+» F5в среде Visual Studio, но это имеет очевидный недостаток, заключающийся в том, что вы не можете использовать функции отладки, которые вы, вероятно, захотите использовать при написании приложения.
Наилучшим компромиссом, вероятно, является вызов
Console.ReadLine
метода только при отладке приложения, заключая его в директиву препроцессора. Что-то вроде:Вы также можете захотеть, чтобы окно оставалось открытым, если было выброшено необработанное исключение. Для этого вы можете поместить
Console.ReadLine();
вfinally
блок:источник
if (System.Diagnostics.Debugger.IsAttached) Console.ReadLine();
.Вместо того, чтобы использовать
Вы можете запустить вашу программу, используя Ctrl+ F5(если вы находитесь в Visual Studio). Затем Visual Studio будет держать окно консоли открытым, пока вы не нажмете клавишу.
Примечание: вы не можете отлаживать свой код в этом подходе.
источник
Ctrl + F5
другому, что просто довольно по-Start
другому?Я предполагаю, что причина, по которой вы не хотите, чтобы он закрывался в режиме отладки, заключается в том, что вы хотите посмотреть значения переменных и т. Д. Поэтому, вероятно, лучше всего просто вставить точку останова в закрывающую "}" главной функции. , Если вам не нужно отлаживать, то Ctrl-F5 - лучший вариант.
источник
Это ведет себя так же для CtrlF5или F5. Поместите непосредственно перед концом
Main
метода.источник
Console.ReadKey()
для любой клавиши,Console.ReadLine()
ждет нажатия EnterПрограмма немедленно закрывается, потому что ничто не мешает ей закрыться. Вставьте точку останова на
return 0;
или добавьтеConsole.Read();
перед,return 0;
чтобы предотвратить закрытие программы.источник
Я немного опоздал на вечеринку, но: в Visual Studio 2019 для проектов .NET Core консоль не закрывается автоматически по умолчанию. Вы можете настроить поведение через меню Инструменты → Параметры → Отладка → Общие → Автоматически закрыть консоль, когда отладка останавливается. Если окно консоли закрывается автоматически, проверьте, не задан ли упомянутый параметр.
То же самое относится и к консольным проектам нового стиля .NET Framework:
Старый стиль .NET Framework по-прежнему безоговорочно закрывал консоль в конце (начиная с Visual Studio 16.0.1).
Ссылка: https://devblogs.microsoft.com/dotnet/net-core-tooling-update-for-visual-studio-2019-preview-2/
источник
Если вы хотите, чтобы ваше приложение было открыто, вам нужно что-то сделать, чтобы поддержать его процесс. Приведенный ниже пример является самым простым, который нужно поместить в конец вашей программы:
Тем не менее, это вызовет перегрузку ЦП, поскольку он вынужден выполнять итерации бесконечно.
На этом этапе вы можете выбрать использование
System.Windows.Forms.Application
класса (но для этого необходимо добавитьSystem.Windows.Forms
ссылку):Это не пропускает процессор и работает успешно
Чтобы избежать добавления
System.Windows.Forms
ссылки, вы можете использовать простой трюк, так называемое ожидание вращения , импортирующийSystem.Threading
:Это также отлично работает и в основном состоит из
while
цикла с отрицательным условием, которое возвращается вышеприведенным лямбда-методом. Почему это не перегрузка процессора? Вы можете посмотреть исходный код здесь ; во всяком случае, он в основном ждет некоторого цикла процессора, прежде чем перебирать.Вы также можете создать зацикливатель сообщений, который просматривает ожидающие сообщения из системы и обрабатывает каждое из них, прежде чем перейти к следующей итерации, следующим образом:
Затем вы можете безопасно выполнить цикл, выполнив что-то вроде этого:
источник
Кроме того, вы можете отложить закрытие, используя следующий код:
Обратите внимание, что
Sleep
используется миллисекунды.источник
Другой способ - использовать
Debugger.Break()
перед возвратом из метода Main.источник
Код закончен, для продолжения необходимо добавить это:
или
источник
Используйте Console.Read (); чтобы предотвратить закрытие программы, но убедитесь, что вы добавили
Console.Read();
код перед оператором возврата, иначе это будет недоступный код.проверить эту консоль.Читать
источник
Добавьте
Read
метод, чтобы показать вывод.источник
Вот способ сделать это без участия
Console
:источник
Программа закрывается, как только ее выполнение завершено. В этом случае, когда вы
return 0;
. Это ожидаемая функциональность. Если вы хотите увидеть вывод, то либо запустите его вручную в терминале, либо установите ожидание в конце программы, чтобы он оставался открытым в течение нескольких секунд (используя библиотеку потоков).источник
это асинхронный ответ в консольном приложении в C #?
все, что есть в консольном приложении, никогда не использовать,
await
а использоватьtheAsyncMethod().GetAwaiter().GetResult();
,пример
var result = await HttpClientInstance.SendAsync(message);
становится
var result = HttpClientInstance.SendAsync(message).GetAwaiter().GetResult();
источник
если ваша программа требует, чтобы вы продолжили нажимать клавишу ввода, как вы должны ввести значение и продолжить, затем добавьте новый double или int и введите write перед retunr (0); scanf_s ("% lf" & переменная);
источник
Я всегда добавляю следующее заявление в консольное приложение. (Создайте фрагмент кода для этого, если хотите)
Это помогает, когда вы хотите экспериментировать с различными концепциями через консольное приложение.
Ctr + F5 заставит консоль остаться, но вы не можете отлаживать! Все консольные приложения, которые я написал в реальном мире, всегда неинтерактивны и запускаются планировщиком, таким как рабочая станция TWS или CA, и не требуют чего-то подобного.
источник
Чтобы упростить то, что говорят другие: используйте
Console.ReadKey();
.Это делает так, что программа ждет пользователя, чтобы нажать нормальную клавишу на клавиатуре
Источник: я использую его в своих программах для консольных приложений.
источник
Вы можете решить это очень простым способом, просто вызвав ввод. Однако, если вы нажмете,
Enter
консоль снова отключится. Просто используйте этоConsole.ReadLine();
илиConsole.Read();
источник
Добавьте следующее до возврата 0:
Это печатает строку, чтобы нажать клавишу, чтобы закрыть окно. Это будет держать окно вверх, пока вы не нажмете клавишу ввода. Мои ученики добавили его во все свои программы.
источник
Согласно моему беспокойству, если мы хотим стабилизировать ВЫХОД КОНСОЛЬНОГО ПРИЛОЖЕНИЯ, до закрытия вывода отобразится ИСПОЛЬЗОВАНИЕ, метка: после MainMethod и метка goto; до завершения программы
В программе.
например:
источник
goto
заявление было даже разрешено в C #.