Как мне изменить приложение WinForms, чтобы оно также запускалось в консоли? - PullRequest
3 голосов
/ 23 сентября 2010

У меня есть приложение .NET WinForms, написанное на C #. Теперь для поддержки пакетных операций я бы хотел, чтобы приложение могло работать в консоли.

Возможно ли иметь приложение, которое определяет при запуске, запущено ли оно в консоли или нет?

Какие изменения мне нужно внести, чтобы добиться такого поведения?

Ответы [ 3 ]

8 голосов
/ 23 сентября 2010

В вашем решении должен быть файл Program.cs, который содержит:

static void Main() 
{
}

Вы заметите, что в этом методе есть что-то вроде:

Application.Run(new Form1());

Здесь ваша форма фактически запускается, поэтому вы можете изменить Main() на что-то вроде этого:

static void Main(string[] args)
{
   if(args.Length < 1)
   {
      Application.Run(new Form1());
      return;
   }
   else
   {
     // Handle your command line arguments and do work
   }
}

Так что, если ваша программа вызывается без аргументов командной строки, форма Windows открывается и делает свое дело. В противном случае вы делаете то, что вам нужно, через командную строку и выходите, даже не показывая форму.

2 голосов
/ 23 сентября 2010

Вы можете выделить консоль для вашего приложения WinForms, используя функцию AllocConsole . Вы можете найти больше информации о том, как вызвать это из C # на его pinvoke page .

Однако это не сделает его настоящим консольным приложением, и я слышал, что есть некоторые ограничения, однако оно может работать в зависимости от ваших конкретных потребностей.

1 голос
/ 23 сентября 2010

Вы можете использовать метод main в файле program.cs и определить, передаются ли параметры командной строки, если они выполняют пакетную обработку, если не отображается GUI.

public static void Main(string[] args)
{
 if (args.count > 0) {
  //batch
 } else {
  //gui
 }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...