从使用新创建的进程的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()将等待过程完成?
最佳答案
编辑:
对不起,请改行,直接回答您的问题。是的,您需要致电Process.WaitForExit();
。这将确保在调用ReadToEnd()
之前该进程已产生所有输出。
ReadToEnd是同步功能。因此,如果您未在代码中调用它,它将阻塞您的主线程,直到仅捕获StandardOutput的第一个输出为止。但是使用WaitForExit将确保您拥有一切。
您也可以考虑异步读取进程的输出,请参见实现OutputDataRecieved
的此MSDN Example
关于c# - 从流程和waitforexit的std输出读取ReadToEnd,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12358091/