Некоторые разработчики полагают, что быстрое-но-неправильное решение иногда предпочтительно для медленного-но-корректного. Таким образом, они проигнорируют различные граничные условия или ситуации, которых "никогда не будет происходить", или "не будет иметь значения" в производстве.
Это никогда не хорошая идея. Решения всегда должны быть "корректными".
Вы, возможно, должны скорректировать свое определение "корректных" в зависимости от ситуации. То, что важно, - то, что Вы знаете/определяете точно, чем Вы хотите, чтобы результат был для любого условия, и что код дает те результаты.
По большей части см. Ответ здесь . Тем не менее, я хотел бы указать на существование вызова API FreeConsole ()
, который позволяет изящно закрыть консоль.
[DllImport("kernel32.dll")]
static extern int FreeConsole()
Одна вещь, которую я хотел бы отметить: вы можете увидеть некоторые странности командной строки, появляющейся перед выводом вашей консоли, если вы запускаете с существующей консоли и подключаетесь к ней с помощью AttachConsole
(в отличие от AllocConsole
).
Это - это проблема времени, которую сложно обойти. Если это проблема, сделайте свое приложение консольным, как предлагали другие. Однако это приведет к тому, что командная строка не появится, пока приложение не закроется, что может быть не тем, что вам нужно, если вы открываете winform.
В ответ на ваш комментарий : либо AttachConsole
, либо AllocConsole
. Пример, который я привел, сначала пытается подключиться к существующей консоли. Если это не удается (скорее всего, потому, что его не существует), вместо этого создается новое окно консоли.
Если вы найдете способ получить лучшее из обоих миров с точки зрения поведения командной строки и интерактивного режима графического интерфейса, пожалуйста, дай мне знать. Я не проводил тщательного поиска решения, но у меня есть несколько второстепенных приложений, которые могут оказаться полезными.
Кстати: если вы планируете использовать каналы в своей командной строке (перенаправление вывод в файл, например), к сожалению, это не сработает.
Если это не удается (скорее всего, потому, что его не существует), вместо этого создается новое окно консоли.Если вы найдете способ получить лучшее из обоих миров с точки зрения поведения командной строки и интерактивного режима графического интерфейса, пожалуйста, дай мне знать. Я не проводил глубокого поиска решения, но у меня есть несколько второстепенных приложений, которые могут выиграть.
Кстати: если вы планируете использовать каналы в своей командной строке (перенаправление вывод в файл, например), к сожалению, это не сработает.
Если это не удается (скорее всего, потому что его не существует), вместо этого создается новое окно консоли.Если вы найдете способ получить лучшее из обоих миров с точки зрения поведения командной строки и интерактивного режима графического интерфейса, пожалуйста, дай мне знать. Я не проводил глубокого поиска решения, но у меня есть несколько второстепенных приложений, которые могут выиграть.
Кстати: если вы планируете использовать каналы в своей командной строке (перенаправление вывод в файл, например), к сожалению, это не сработает.
Это связано с тем, что вы написали приложение winforms - это означает, что System.Console.Out
(т. Е. Стандартный поток вывода) установлен на Stream.Null
. Это означает, что любые вызовы этого потока будут автоматически завершаться ошибкой.
Вы можете обрабатывать ввод из командной строки, потому что они поступают из другого потока. Мораль этой истории заключается в том, что у вас может быть приложение winforms или приложение командной строки, но не оба сразу.
Это связано с типом проекта, который вы настраиваете на вкладке «Приложение» в свойствах проекта. У вас есть 3 варианта:
Однако, если вы работаете с приложением Win, вы также можете обрабатывать аргументы командной строки, поскольку они принимаются функцией Main.
Проект должен быть настроен для компиляции в консольное приложение для работы функции консоли. С другой стороны, у него всегда будет окно консоли, даже если он запущен как графический интерфейс. Я не знаю обходного пути для этого (но мне было бы интересно услышать об этом, если он есть).