从使用新创建进程的stdoutput的MSDN示例:
// This is the code for the base process
Process myProcess = new Process();
// Start a new instance of this program but specify the 'spawned' version.
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo(args[0], "spawn");
myProcessStartInfo.UseShellExecute = false;
myProcessStartInfo.RedirectStandardOutput = true;
myProcess.StartInfo = myProcessStartInfo;
myProcess.Start();
StreamReader myStreamReader = myProcess.StandardOutput;
// Read the standard output of the spawned process.
string myString = myStreamReader.ReadLine();
Console.WriteLine(myString);
myProcess.WaitForExit();
myProcess.Close();
如果不是myStreamReader.ReadLine()而是使用myStreamReader.ReadToEnd(),我仍然会使用myProcess.WaitForExit()吗? 或者ReadToEnd()会等到过程结束?
答案 0 :(得分:3)
修改强>
抱歉转移,直接回答您的问题。是的,您需要致电Process.WaitForExit();
。这将确保在您致电ReadToEnd()
ReadToEnd是同步功能。因此,如果您不在代码中调用它,它将阻止您的主线程,直到它从StandardOutput捕获 仅第一个输出 ,然后就是它。但是使用WaitForExit将确保你拥有一切。
您也可以考虑对流程的输出进行异步读取,请参阅实现OutputDataRecieved
的{{3}}
答案 1 :(得分:1)
“ReadToEnd”是存储在“StreamReader”对象中的函数,我不认为它与等待进程退出有关,但“Process”类可能会处理它本身。顺便说一下,“StreamReader”所具有的所有功能在你提到的情况下都没用。
在我看来,应该调用“WaitForExit”,并且你也会“关闭”。因为它们会释放一些其他方法无法实现的系统资源。据我所知,“ReadToEnd”方法与调用这两个方法无关。
干杯