新的CMD进程写入到现有分配的控制台

本文关键字:分配 控制台 CMD 进程 新的 | 更新日期: 2023-09-27 18:02:26

我在c#中创建的项目使用多线程,我的控制台应用程序解决方案使用+2个项目,1个作为"主"项目,然后子项目作为程序的实际功能组合在一个解决方案中(带有适当的引用)

我知道对于每个进程,只能使用一个控制台,因此据我的理解,我应该创建一个新的cmd.exe进程,并将这个特定线程的输出分配给这个控制台

问题:用CMD .exe创建一个简单的过程很容易,它在现有的CMD控制台上创建一个新的CMD控制台,因此2个控制台。但重新分配标准输出等(参考代码如下)。在新的子线程程序(也不是主应用程序)中,它开始在现有的控制台中写入,而不是在新创建的控制台中写入,因此只有一个控制台可见,

我希望现有的控制台以及具有适当输出的新控制台可见

我错过了什么吗?

注。我正在学习线程以及这是一个业余项目

        Process psi = new ProcessStartInfo("cmd.exe")
        {
            RedirectStandardError = true,
            RedirectStandardInput = true,
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = false,
        };
        p = Process.Start(psi);
        Streamwriter sw = p.StandardInput;
        Streamreader sr = p.StandardOutput;

新的CMD进程写入到现有分配的控制台

不能这样做。

程序的实例,即使是控制台,也不是cmd窗口。这是一个控制台。

此外,要按您想要的方式工作,您需要将StreamWriter打开到StandardOutput流,因为您想要输出数据…这在设计上是不允许的。

窗口由它的进程拥有,而不是它的线程,所以1个进程= 1个控制台窗口。如果你想要更多的控制台窗口,使用多个进程,并使它们使用互操作进行通信。

我使用一个线程来检查更新和重定向标准输入/输出,如上所述