tags:

views:

339

answers:

3

Is there a way to create a second console to output to in .NET when writing a console application?

A: 

A single console is attached to any given process. So in short you can not. But there are ways to "fake it"

Ólafur Waage
+8  A: 

Well, you could start a new cmd.exe process and use stdio and stdout to send and recieve data. I'm coming up with an example.

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();

More info on MSDN.

alexn
+1  A: 

Following fires of an application dependant number of console windows and stores the amount and parameters for the console inside a String Dictionary that is then loped to generate the required amount of spawned console apps. You would only need the process stuff if only spawning one of course.

//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;
            }
        }

Note this is intended either to run hidden(CreateNoWindow) or visible.

Matrim