Добавьте эти функции где-нибудь в классе к вашему проекту:
(требуется using System.Runtime.InteropServices;
на вершине класса)
[DllImport("kernel32.dll")]
private static extern bool AttachConsole(int dwProcessId);
[DllImport("kernel32.dll")]
private static extern bool FreeConsole();
Тогда позвоните AttachConsole(-1)
Теперь вы можете использовать класс System.Console, как обычно, для записи в консоль и установки цветов и тому подобного.
Если вам больше не нужно писать в консоль, позвоните FreeConsole()
, чтобы отсоединить ваш процесс от нее.
Имейте в виду, что это фактически не блокирует консоль от обработки дальнейших команд. Пользователь по-прежнему может вводить что-либо в консоль в любое время.
Рекомендуется следующий способ:
- Создание консольного приложения
- Пиши ему все, что хочешь.
- Позвоните
FreeConsole()
, когда он вам больше не нужен.
- Откройте форму, используя
Application.Run()
. Неиспользование application.Run и только показ формы не создает правильный цикл сообщений, и могут происходить странные вещи.
Вы можете переключать 3 и 4, но как только вы вызовете метод Application.Run
, код не будет продолжаться, пока форма не будет закрыта. Поэтому либо пишите в консоль в форме и освобождайте ее оттуда, либо порождайте форму в отдельном потоке (что имеет другие непредвиденные побочные эффекты)
Вы можете указать любой идентификатор процесса для функции AttachConsole. -1 по умолчанию для родительского процесса, что, скорее всего, то, что вы хотите.