阅读标准输出的C#问题

时间:2011-08-30 08:08:27

标签: c# standards

这些让我难过。所以我在C#中创建一个程序来为Terraria Server提供GUI前端。我尝试了几种方法,但我总是遇到同样的问题。 首先,我使用System.Diagnostic启动该过程。 然后我尝试了几件事,比如使用BeginOutputReadLine异步读取控制台输出或创建一个后台工作程序来执行以下操作:

        while (!terrariaProcess.StandardOutput.EndOfStream)
        {
            consoleOutput.Items.Add(terrariaProcess.StandardOutput.ReadLine());
        }

但输出总是混乱。 例 它应该是:(如果我使用cmd来执行它,它看起来如何)

Terraria Server v1.0.6.1
Choose World: 
1       Test
n       New World
d <number>  Delete World
>>n
Choose size:
1       Small
2       Medium
3       Large
>>3
Enter World Name:
>>Hello World

但是我的程序将其读作:

Terraria Server v1.0.6.1
1       Test
n       New World
d <number>  Delete World
>>n
Choose World: Terraria Server v1.0.6.1
1       Small
2       Medium
3       Large
>>3
Choose size: Terraria Server v1.0.6.1
>>Hello World

无论我使用什么方法,它都会这样做。有人可以帮忙吗?我是一个白痴(再次)?

编辑: 在Jon的要求下,我已经制作了一个小型控制台应用程序来尝试做同样的事情。我在循环中检查控制台输入时遇到了一些问题,因此我只能测试第一个提示,但它仍然看起来很糟糕。 我的代码:

    Process terrariaProcess;
    terrariaProcess = new Process();
    terrariaProcess.StartInfo.FileName = "TerrariaServer.exe";
    terrariaProcess.StartInfo.UseShellExecute = false;
    terrariaProcess.StartInfo.RedirectStandardInput = true;
    terrariaProcess.StartInfo.RedirectStandardOutput = true;
    terrariaProcess.StartInfo.CreateNoWindow = true;
    terrariaProcess.Start();
    while (!terrariaProcess.StandardOutput.EndOfStream)
    {
        Console.WriteLine(terrariaProcess.StandardOutput.ReadLine());
    }

结果输出:

Terraria Server v1.0.6.1
1       Test
n       New World
d <number>  Delete World

1 个答案:

答案 0 :(得分:0)

调用函数Console.Out.Flush();