powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / WinForms и Console
9 сообщений из 9, страница 1 из 1
WinForms и Console
    #40029081
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть WinForms приложение, там такой кусок кода

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public void Do()
        {
            try
            {
                // Create a console
                AllocConsole();

                Console.WriteLine("Hello World");
                Console.ReadKey();



При запуске в студии - создается Винформ окно и рядом консольное, но "Hello World" выводится не в консоль, а в Output панель студии.
И на чтении ReadKey обламывается
ex = {"Cannot read keys when either application does not have a console or when console input has been redirected from a file. Try Console.Read."}

Как из-под студии заставить писать и читать из консольного окна?
...
Рейтинг: 0 / 0
WinForms и Console
    #40029090
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конфигурация проекта какая? (x86/x64/AnyCPU ?)
...
Рейтинг: 0 / 0
WinForms и Console
    #40029100
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самый рабочий вариант, это собирать консольное приложение, а не оконное, а в нем запускать WinForms окно или Application;
Суть в том, что в результирующем EXE файле, в его заголовке есть соответствующий атрибут, который определяет, что это именно консольное, а не GDI, или какое то еще приложение. По этому, чтоб можно было взаимодействовать с консолью, работали перенаправления и прочая мура без танцев с бубном, нужно его выставлять. Он и выставляется, когда собираешь проект, как консольное приложение.
...
Рейтинг: 0 / 0
WinForms и Console
    #40029112
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
конфигурация проекта какая? (x86/x64/AnyCPU ?)


AnyCPU

Но, собственно, можно выбрать другую
...
Рейтинг: 0 / 0
WinForms и Console
    #40029118
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В свойствах прожекта поменял
...
Рейтинг: 0 / 0
WinForms и Console
    #40029123
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот как бы такое сделать:
в вызываемом коде много
Console.WriteLine("арарарара");

Как сделать новую форму и туда перенаправить весь вывод Console?
...
Рейтинг: 0 / 0
WinForms и Console
    #40029134
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
А вот как бы такое сделать:
в вызываемом коде много
Console.WriteLine("арарарара");

Как сделать новую форму и туда перенаправить весь вывод Console?

https://www.google.com/search?q=c# redirect console output

Roman Mejtes
По этому, чтоб можно было взаимодействовать с консолью, работали перенаправления и прочая мура без танцев с бубном, нужно его выставлять. Он и выставляется, когда собираешь проект, как консольное приложение.

Да вот ничего подобного. Сто раз вышеописанное делал, всё прекрасно работает, достаточно просто сделать AllocConsole. Причем проблема у ТС возникает только при запуске проекта из студии - собственно, она у всех, у кого возникает, возникает именно в случае запуска из студии, в отдельном самостоятельном exe в консоль всё прекрасно выводится. У меня было подобная проблема, всегда спасало использование NLog c console-таргетом (соответственно, вместо Console.WriteLine - log.Debug), и перевод приложения с x86 на AnyCPU/х64 - при запуске из студии в консоль начинало выводиться норально.
...
Рейтинг: 0 / 0
WinForms и Console
    #40029191
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

Если из GDI приложения вызвать AllocConsole, сама консоль будет создана и можно будет в нее выводить и прочее, но вот перенаправление потоков системное работать не будет, инфа 100% и это будет отдельное окно консоли, а не то, из которого эта программа была запущена. то есть если я запущу такую программу, вывод будет не в текущую консоль, а в другую.
как по мне, это вообще не торт, работать с такой консолью будет тот еще геморой, который не стоит свеч. Если я не прав, хотелось бы глянуть на пример, где это сделано.

самый топовый вариант, который у меня получался, это именно сделать WinForm приложение и в конце компиляции менять в хеадере EXE файла этот флаг. но такой вариант я советовать не буду, так как это уже по сути хак, а не решение, костыль
...
Рейтинг: 0 / 0
WinForms и Console
    #40029208
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
самый топовый вариант, который у меня получался, это именно сделать WinForm приложение и в конце компиляции менять в хеадере EXE файла этот флаг

Зачем такие извраты? Я просто в csproj обычно прописываю
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<Choose>
  <When Condition=" '$(Configuration)' == 'Debug' ">
    <PropertyGroup>
      <OutputType>Exe</OutputType> <!-- CUI subsystem -->
    </PropertyGroup>
  </When>
  <Otherwise>
    <PropertyGroup>
      <OutputType>WinExe</OutputType>
    </PropertyGroup>
  </Otherwise>
</Choose>



Roman Mejtes
Если из GDI приложения вызвать AllocConsole, сама консоль будет создана и можно будет в нее выводить и прочее, но вот перенаправление потоков системное работать не будет, инфа 100% и это будет отдельное окно консоли

Ну потому что приложение с UI subsystem при запуске не наследует консоль, из которого было запущено, потому что оно UI, и AllocConsole создает новую консоль. Для использования консоли, из которой был сделан запуск, надо вызывать AttachConsole.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / WinForms и Console
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]