c#读取标准输出的问题
本文关键字:问题 标准输出 读取 | 更新日期: 2023-09-27 18:07:13
这个让我难倒了。所以我在c#中编写了一个程序,为Terraria服务器提供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
调用函数Console.Out.Flush();