Проблемы C # с чтением стандартного вывода - PullRequest
1 голос
/ 30 августа 2011

Это меня озадачило. Поэтому я делаю программу на 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

1 Ответ

0 голосов
/ 30 августа 2011

вызов функции Console.Out.Flush();

...