【问题标题】:Is there a way to create a second console to output to in .NET when writing a console application?在编写控制台应用程序时,有没有办法创建第二个控制台以在 .NET 中输出?
【发布时间】:2010-10-16 09:11:06
【问题描述】:

在编写控制台应用程序时,有没有办法在 .NET 中创建第二个控制台以输出到?

【问题讨论】:

    标签: c# .net console


    【解决方案1】:

    好吧,你可以启动一个新的 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的信息。

    【讨论】:

    • 我也无法让它工作。该进程已启动,因为我可以在任务管理器中看到它,但控制台窗口永远不会出现,无论我将 ProcessStartInfo 对象的 CreateNoWindowWindowStyle 属性设置为什么。也许它与 Windows 7 上的权限有关?
    【解决方案2】:

    下面会触发依赖于应用程序的控制台窗口数量,并将控制台的数量和参数存储在字符串字典中,然后循环以生成所需数量的衍生控制台应用程序。当然,如果只产生一个,你就只需要过程的东西。

    //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 在哪里以及如何定义?
    • 随心所欲。它可以是字符串 CONSOLE_NAME = **** ,也可以是上面示例中循环的步骤字典中的字符串。微软定义见docs.microsoft.com/en-us/dotnet/api/…
    【解决方案3】:

    单个控制台附加到任何给定进程。所以总之你不能。但是有办法“伪造”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 2013-05-16
      • 2017-10-19
      • 2010-09-14
      • 2012-06-15
      • 2011-03-07
      相关资源
      最近更新 更多