Консоль. Writeline () не работа

Некоторые разработчики полагают, что быстрое-но-неправильное решение иногда предпочтительно для медленного-но-корректного. Таким образом, они проигнорируют различные граничные условия или ситуации, которых "никогда не будет происходить", или "не будет иметь значения" в производстве.

Это никогда не хорошая идея. Решения всегда должны быть "корректными".

Вы, возможно, должны скорректировать свое определение "корректных" в зависимости от ситуации. То, что важно, - то, что Вы знаете/определяете точно, чем Вы хотите, чтобы результат был для любого условия, и что код дает те результаты.

6
задан Sadegh 6 August 2009 в 19:29
поделиться

4 ответа

По большей части см. Ответ здесь . Тем не менее, я хотел бы указать на существование вызова API FreeConsole () , который позволяет изящно закрыть консоль.

[DllImport("kernel32.dll")]
static extern int FreeConsole() 

Одна вещь, которую я хотел бы отметить: вы можете увидеть некоторые странности командной строки, появляющейся перед выводом вашей консоли, если вы запускаете с существующей консоли и подключаетесь к ней с помощью AttachConsole (в отличие от AllocConsole ).

Это - это проблема времени, которую сложно обойти. Если это проблема, сделайте свое приложение консольным, как предлагали другие. Однако это приведет к тому, что командная строка не появится, пока приложение не закроется, что может быть не тем, что вам нужно, если вы открываете winform.

В ответ на ваш комментарий : либо AttachConsole , либо AllocConsole . Пример, который я привел, сначала пытается подключиться к существующей консоли. Если это не удается (скорее всего, потому, что его не существует), вместо этого создается новое окно консоли.

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

Кстати: если вы планируете использовать каналы в своей командной строке (перенаправление вывод в файл, например), к сожалению, это не сработает.

Если это не удается (скорее всего, потому, что его не существует), вместо этого создается новое окно консоли.

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

Кстати: если вы планируете использовать каналы в своей командной строке (перенаправление вывод в файл, например), к сожалению, это не сработает.

Если это не удается (скорее всего, потому что его не существует), вместо этого создается новое окно консоли.

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

Кстати: если вы планируете использовать каналы в своей командной строке (перенаправление вывод в файл, например), к сожалению, это не сработает.

6
ответ дан 8 December 2019 в 12:22
поделиться

Это связано с тем, что вы написали приложение winforms - это означает, что System.Console.Out (т. Е. Стандартный поток вывода) установлен на Stream.Null . Это означает, что любые вызовы этого потока будут автоматически завершаться ошибкой.

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

4
ответ дан 8 December 2019 в 12:22
поделиться

Это связано с типом проекта, который вы настраиваете на вкладке «Приложение» в свойствах проекта. У вас есть 3 варианта:

  • Консольное приложение
  • Приложение Win
  • Библиотека классов

Однако, если вы работаете с приложением Win, вы также можете обрабатывать аргументы командной строки, поскольку они принимаются функцией Main.

0
ответ дан 8 December 2019 в 12:22
поделиться

Проект должен быть настроен для компиляции в консольное приложение для работы функции консоли. С другой стороны, у него всегда будет окно консоли, даже если он запущен как графический интерфейс. Я не знаю обходного пути для этого (но мне было бы интересно услышать об этом, если он есть).

0
ответ дан 8 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: