从使用新创建的进程的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/

10-10 21:54