控制台应用程序的重定向输出非常不一致

问题描述

我有一个控制台应用程序 (steamcmd.exe),我想将其输出重定向到我的 Winforms 应用程序中的文本框。

https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip

我已经设法做到了,但是我得到的输出非常不一致。例如,我通常用这些参数开始 steamcmd.exe

+login anonymous +force_install_dir ./unturned/ +app_update 1110390 validate

这将安装 Unturned 游戏服务器。输出完全没问题。它始终显示下载进度。

但是当我使用我的 Winforms 应用程序启动 steamcmd.exe重定向输出时,它变得非常不一致,它可能停留在 2%,几分钟后跳到 58%,再次卡住并跳转到 88% 等

这是我的代码

   steamCMDProc = new Process();
   void startSteamCMD()
    {
        steamCMDProc.EnableRaisingEvents = true;
        steamCMDProc.OutputDataReceived += new DataReceivedEventHandler(steamCMD_OutputDataReceived);
        steamCMDProc.ErrorDataReceived += new DataReceivedEventHandler(steamCMD_ErrorDataReceived);
        steamCMDProc.Exited += new System.EventHandler(steamCMDProcExited);

        steamCMDProc.StartInfo.FileName = srvInstDir + @"\steamcmd.exe";
        steamCMDProc.StartInfo.Arguments = "login anonymous +force_install_dir ./unturned/ +app_update 1110390 validate";
        steamCMDProc.StartInfo.UseShellExecute = false;
        steamCMDProc.StartInfo.RedirectStandardError = true;
        steamCMDProc.StartInfo.RedirectStandardOutput = true;
        steamCMDProc.StartInfo.RedirectStandardInput = true;
        steamCMDProc.StartInfo.ErrorDialog = false;
        steamCMDProc.StartInfo.CreateNowindow = true;
        steamCMDProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
       
        steamCMDProc.Start(); 
       
        // inputWriter = steamCMDProc.StandardInput; not currently used
        StartThread(steamCMDProcExited); //i start a thread which constantly loops and waits till steamCMD has exited
        steamCMDProc.BeginErrorReadLine();
        steamCMDProc.BeginoutputReadLine();
   }
   void steamCMD_ErrorDataReceived(object sender,DataReceivedEventArgs e)
   {
         InvokeIfrequired(textBox2,() => //function that checks if invoke is required
         { textBox2.AppendText(e.Data + Environment.NewLine); });
    }

    void steamCMD_OutputDataReceived(object sender,DataReceivedEventArgs e)
    {      
         InvokeIfrequired(textBox2,() =>
         { textBox2.AppendText(e.Data + Environment.NewLine); });
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)