在编写控制台应用程序时,有没有一种方法可以创建第二个控制台输出窗口以便在.NET中输出内容?

22

在编写控制台应用程序时,有没有一种方法可以创建第二个控制台来输出?

3个回答

20

你可以启动一个新的cmd.exe进程,并使用stdio和stdout发送和接收数据。

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe")
{
    RedirectStandardError = true,
    RedirectStandardInput = true,
    RedirectStandardOutput = true,
    UseShellExecute = false
};

Process p = Process.Start(psi);

StreamWriter sw = p.StandardInput;
StreamReader sr = p.StandardOutput;

sw.WriteLine("Hello world!");
sr.Close();

MSDN 上有更多信息。


10
我也无法使这个工作。进程开始了,因为我可以在任务管理器中看到它,但控制台窗口从未出现,无论我如何设置ProcessStartInfo对象的CreateNoWindow和WindowStyle属性。也许这与Windows 7上的权限有关? - Steven Rands
窗口对我也没有显示,和@StevenRands一样。 - xXTurner
你在这里所做的是启动cmd.exe,它是一个命令行解释器。更有用的是启动一个创建控制台并将输入(键盘)重定向到输出(屏幕)的进程。 - tigrou
你在这里做的是启动cmd.exe,它是一个命令行解释器。更有用的是启动一个进程,创建一个控制台并将输入(键盘)重定向到输出(屏幕)。 - undefined

4
以下代码会启动应用程序相关数量的控制台窗口,并将控制台的数量和参数存储在字符串字典中,然后循环使用该字典生成所需数量的控制台应用程序。当然,如果只需要生成一个进程,则只需要使用进程部分的代码。
//Start looping dic recs and firing console
foreach (DictionaryEntry tests in steps)
{
    try
    {
        Process runCmd = new Process();
        runCmd.StartInfo.FileName = CONSOLE_NAME;
        runCmd.StartInfo.UseShellExecute = true;
        runCmd.StartInfo.RedirectStandardOutput = false;
        runCmd.StartInfo.Arguments = tests.Value.ToString();

        if (cbShowConsole.Checked)
        {
            runCmd.StartInfo.CreateNoWindow = true;
            runCmd.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
        }
        else
        {
            runCmd.StartInfo.CreateNoWindow = false;
            runCmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
        }
        runCmd.Start();                
    }
    catch (Exception ex)
    {
        string t1 = ex.Message;
    }
}

请注意,此处旨在隐藏运行(CreateNoWindow)或可见运行。

CONSOLE_NAME 是在哪里和如何定义的? - Dai
无论你想要什么,它都可以是一个字符串CONSOLE_NAME = ****,也可以是在上面的示例中循环的步骤字典中的字符串。有关Microsoft的定义,请参见https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.processstartinfo.filename?view=netframework-4.7.2 - Matrim

-7

一个控制台只能附加到任何给定的进程。所以简而言之,你不能。但是有办法“假装它”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接