Как использовать отдельные окна консоли для дочерних консольных приложений?

Windows 10, C #, .NET Core 3.1

Я хочу иметь несколько окон консоли для вывода. Например, на одном дисплее я хочу разместить одно окно консоли, которое будет отображать только ошибки, на другом дисплее я хочу разместить множество других окон консоли, которые будут отображать различные отчеты. Все эти окна консоли доступны только для чтения. Кроме того, в то же время я хочу иметь главное окно консоли, которое я буду использовать в качестве терминала (для ввода ключевых слов). Я видел подобное в фильмах о программистах и ​​хочу попробовать сделать то же самое :)

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

Это мой основной код приложения:

using System;
using System.Diagnostics;

namespace ConsoleClient
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "Console app...";

            Console.WriteLine("This is the message for the main console application.");

            var procInfo = new ProcessStartInfo(
                @".loggerConsoleLogger.exe");

            procInfo.UseShellExecute = false;
            procInfo.RedirectStandardInput = true;
            procInfo.CreateNoWindow = false;

            using (var proc = new Process())
            {
                proc.StartInfo = procInfo;
                proc.Start();

                var sw = proc.StandardInput;

                sw.WriteLine("This is the message for the child console application.");

                Console.WriteLine("Press ENTER for exit...");
                Console.ReadLine();
                proc.Kill();
            }
        }
    }
}

Это мой дочерний код приложения:

using System;
using System.Diagnostics;

namespace ConsoleLogger
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = $"Process #{Process.GetCurrentProcess().Id} (logger)";
            while (true)
            {
                var line = Console.In.ReadLine();
                Console.WriteLine(line);
            }
        }
    }
}

Результатом является общее консольное окно для обоих процессов (parrent и child):

введите описание изображения здесь

Как я могу решить это?

Всего 1 ответ


Я попробовал следующее в VS 2019.

Я предполагаю, что ваши процессы не инициализированы правильно:

Код приложения основной консоли (запускает 2x процесса):

static void Main(string[] args)
    {
        Console.Title = "Main app...";
        Console.WriteLine("This is the message for the main console application.");

        using (var process1 = new Process())
        {
            process1.StartInfo.UseShellExecute = true;
            process1.StartInfo.CreateNoWindow = false;
            process1.StartInfo.FileName = @"../../../../ConsoleAppAdditional/binDebug
etcoreapp3.1/ConsoleAppAdditional.exe";
            process1.Start();
        }

        using (var process2 = new Process())
        {
            process2.StartInfo.UseShellExecute = true;
            process2.StartInfo.CreateNoWindow = false;
            process2.StartInfo.FileName = @"../../../../ConsoleAppAdditional/binDebug
etcoreapp3.1/ConsoleAppAdditional.exe";
            process2.Start();
        }

        Console.WriteLine("Press ENTER (MainApp) for exit...");
        Console.ReadLine();
    }

Код вторичного консольного приложения (в новом консольном проекте):

        static void Main(string[] args)
    {
        Console.Title = $"Process #{Process.GetCurrentProcess().Id} (logger additional)";
        {
            Console.WriteLine("New additionnal app started... " + Process.GetCurrentProcess().Id);
            var line = Console.In.ReadLine();
            Process.GetCurrentProcess().Kill();
        }
    }

Результат: Результат нескольких консолей


Есть идеи?

10000