我有一个控制台应用程序,我想在c#应用程序中处理std。流程执行期间重定向标准输出不刷新
基本上我已经成功使用此代码做到这一点:
Process ProcessObj = new Process();
ProcessObj.StartInfo.WorkingDirectory = WorkingPath;
ProcessObj.StartInfo.FileName = ApplicationPath;
ProcessObj.StartInfo.Arguments = ApplicationArguments;
ProcessObj.StartInfo.UseShellExecute = false;
ProcessObj.StartInfo.CreateNoWindow = true;
ProcessObj.StartInfo.RedirectStandardOutput = true;
// Start the process
ProcessObj.Start();
// loop through until the job is done
bool stopper = false;
while (!stopper)
{
stopper = ProcessObj.WaitForExit(100);
string line = null;
// handle normal outputs (loop through the lines)
while (true)
{
line = ProcessObj.StandardOutput.ReadLine();
if (line == null)
break;
Logger.Trace("Out: \"" + line + "\"");
}
}
在运行的过程只需要几秒钟,它看起来像整个事情是工作没有任何问题。当我更改控制台应用程序的配置以计算更多时,就会发现该过程正在运行数小时。在这段时间,我的C#应用程序从控制台应用程序中得不到任何响应由于控制台应用程序被隐藏,它看起来像应用程序被困住了,但事实并非如此。它已经在后台运行了,而且当控制台应用程序完成执行时,似乎所有的std输出都只传递给我的c#应用程序。 所以问题是,我没有看到std out行住在我的c#应用程序。它将在控制台应用程序完成后的几小时后刷新。
有什么办法可以刷新这个std out重定向吗? 有人知道为什么这不像我想要的那样工作吗?
PS:当我在普通的cmd窗口中以独立的方式执行控制台应用程序时,输出显示无任何问题。
请帮忙。
你应该只使用'ProcessObj.StartInfo.RedirectStandardOutput = TRUE;'在代码中的错误重定向不使用你! – Writwick
好的...这只是一个代码片段,所以你在真实代码中也会有相同的(真)循环来处理错误。 – fpdragon
我会告诉你使用'ProcessObj.StartInfo.RedirectStandardError = true;'。我之前有过类似的问题,当时我更换了解决方案的重定向。 – Writwick