问题描述
我有一个控制台应用程序 (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 (将#修改为@)