Это меня озадачило. Поэтому я делаю программу на C #, чтобы предоставить интерфейс с графическим интерфейсом для Terraria Server. Я пробовал несколько методов, но у меня всегда одна и та же проблема.
Сначала я запускаю процесс, используя 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
Это происходит независимо от того, какой метод я использую. Может кто-нибудь помочь, пожалуйста? Я опять идиот (опять)?
EDIT:
По просьбе Джона я сделал небольшое консольное приложение, чтобы попытаться сделать то же самое. У меня возникли проблемы с проверкой входных данных консоли из цикла, поэтому я могу проверить только до первого запроса, но он все еще кажется неисправным.
Мой код:
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