簡體   English   中英

讀取標准輸出的C#問題

[英]C# Problems with Reading Standard Output

這讓我難過。 因此,我正在用C#編寫一個程序來為Terraria服務器提供GUI前端。 我嘗試了幾種方法,但始終遇到相同的問題。 首先,我使用System.Diagnostic啟動該過程。 然后,我嘗試了幾件事,例如使用BeginOutputReadLine異步讀取控制台輸出或創建Background Worker來執行以下操作:

        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

無論我使用哪種方法,它都會執行此操作。 有人可以幫忙嗎? 我又是個白痴嗎?

編輯:應喬恩的要求,我做了一個小型控制台應用程序,試圖做同樣的事情。 我在從循環內檢查控制台輸入時遇到了一些麻煩,因此我只能測試第一個提示,但它似乎還是壞了。 我的代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM