Консольное приложение должно ждать параметры

У меня есть консольное приложение, похожее на это:

static void Main(string[] args)
{
   if (args.Length == 0)
   {
      //do something
   }
   else if (args.Length % 2 == 0)
   {
      //do something else
   }
}

Теперь, когда я создаю и запускаю свой файл .exe, он просто открывается на мгновение, чтобы запустить код, и закрывается.

Возможно ли, что .exe после запуска ждет, пока я введу параметры?

Я знаю, что могу открыть cmd и записать каталог в свой файл и записать свои параметры (C:\Example\MyExe.exe -Parameter1). Но единственный ли это способ?

Visual Studio имеет страницу в свойствах проекта, где вы можете указать аргументы по умолчанию для своего приложения. В противном случае вам нужно закодировать серию Console.ReadLine, чтобы получить ввод, который вы хотите, непосредственно внутри приложения.

Steve 02.04.2019 14:57

Он не будет ждать args, поскольку они передаются при запуске приложения, но вы можете реализовать свое приложение для приема пользовательского ввода с помощью Console.ReadLine .

mm8 02.04.2019 14:57

Показанный вами код не заставит консоль ждать ввода. В отличие от некоторых других IDE для сценариев, вам придется писать код, если вы хотите получать подсказки. Если ваш запрос касается того, как указать Visual Studio предоставить аргумент командной строки вашему приложению, вам следует перейти к свойствам проекта и на вкладке отладки есть поле аргументов командной строки, где вы можете ввести эту информацию

Vikhram 02.04.2019 14:58

Подсказка: вы можете нажать CTR+F5 (Запустить без отладчика), чтобы запустить консольное приложение. Это автоматически будет ждать нажатия клавиши перед закрытием окна консоли. Таким образом, вы не можете проверить «сделать что-то еще».

Sinatr 02.04.2019 15:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
5
1 412
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Если ваше приложение открывается и сразу же закрывается, это потому, что нет метода «блокировки». Вы можете добавить Console.Read(); в конце, чтобы дождаться нажатия клавиши.

В примере:

static void Main(string[] args)
{
   if (args.Length == 0)
   {
      //do something
   }
   else if (args.Length % 2 == 0)
   {
      //do something else
   }

   Console.WriteLine("Press any key to exit the application.");
   Console.Read();
}

Для передачи параметров я привык использовать cmd и передавать аргументы напрямую в exe, но это можно сделать в VS

Щелкните правой кнопкой мыши проект -> Свойства -> Отладка -> Аргументы командной строки.

Да, это единственный способ, потому что параметры передаются при запуске приложения.

Вы можете добавить параметры отладки в Visual Studio, если хотите выполнить отладку. Для этого щелкните правой кнопкой мыши проект и откройте настройки проекта. Затем вы можете добавить их в раздел отладки.

Посмотрите Передача параметров командной строки с помощью Visual Studio C# для получения дополнительной информации.

Дополнительная информация: если вы хотите, чтобы ваше приложение оставалось открытым, пока пользователь не нажмет клавишу, вы можете использовать для этого Console.Read();.

Аргументы командной строки выглядят многообещающе. Но моя проблема здесь в том, что возможно, что аргументы не переданы или до 10 аргументов. Я думаю, это не может быть решено с параметрами отладки?

axbeit 02.04.2019 15:16

@axbeit В чем проблема без параметров? Ваш код if (args.Length == 0) будет выполнен. Похоже, у вас более одной проблемы. Вам нужны параметры запуска (как вы использовали в своем коде) или вам нужен пользовательский ввод в качестве параметров?

Mighty Badaboom 02.04.2019 15:19

Хорошо, поэтому я вставил в аргументы командной строки это: «Аргумент1, Аргумент2, Аргумент3». Затем я создаю свой проект. дважды щелкнул MyExe.exe, окно сразу же всплывает и закрывается. Но я хочу, чтобы вместо закрытия он позволял мне писать свои аргументы.

axbeit 02.04.2019 15:24

Просто взгляните на ответ от mm8. И будьте более конкретными в своем следующем вопросе ;) Намного проще, когда мы знаем, чего вы пытаетесь достичь, а не спрашиваем вас.

Mighty Badaboom 02.04.2019 15:30
  1. Щелкните правой кнопкой мыши проект по умолчанию
  2. Выберите «Свойства»
  3. Нажмите на вкладку «Отладка» слева.
  4. Введите аргументы командной строки в поле «Аргументы командной строки».
  5. Сохраните обновленные свойства и запустите проект.

Аргументы командной строки выглядят многообещающе. Но моя проблема здесь в том, что возможно, что аргументы не переданы или до 10 аргументов. Я думаю, это не может быть решено с параметрами отладки?

axbeit 02.04.2019 15:16

В этом случае вы можете создать второе приложение и запустить Process.Start для своего приложения с вашими параметрами (или нет).

piatkosia 02.04.2019 15:23
Ответ принят как подходящий

Is it possible that the .exe waits for me to enter parameters after starting it?

Он не будет ждать args, так как предполагается, что они будут переданы при запуске приложения, но вы можете реализовать свое приложение для приема пользовательского ввода с помощью Console.ReadLine. Вот пример:

static void Main(string[] args)
{
    if (args.Length == 0)
    {
        List<string> arguments = new List<string>();
        do
        {
            Console.WriteLine("Input argument and press <ENTER>: ");
            string argument = Console.ReadLine();
            if (string.IsNullOrEmpty(argument))
                break;
            arguments.Add(argument);
        } while (true);

        Console.WriteLine("continue...");
    }
    else if (args.Length % 2 == 0)
    {
        //do something else
    }
}

Если добавить строку:

Console.ReadLine();

консоль останется открытой до тех пор, пока не будет нажата клавиша.

Итак, ваш код должен быть:

static void Main(string[] args)
{
   if (args.Length == 0)
   {
      //do something
   }
   else if (args.Length % 2 == 0)
   {
      //do something else
   }
   Console.ReadLine();
}

Чтобы передать некоторые параметры через Visual Studio: щелкните проект правой кнопкой мыши -> Характеристики -> Отлаживать -> Аргументы командной строки

Напишите Console.Readkey() после завершения else if () {}...

консоль не закроется, пока вы не нажмете ввод

Другие вопросы по теме