При использовании System.Diagnostic Process, я пропущу некоторые выходные строки между началом процесса и началом захвата вывода? - PullRequest
1 голос
/ 11 сентября 2010

Если у меня есть код, такой как

proc.Start();
string resultOut;

while ( (!proc.HasExited && (resultOut = stdOut.ReadLine()) != null))
{
// Do some operation based on resultOut
}

Могу ли я пропустить некоторые строки с момента запуска proc до начала захвата / анализа или он будет ждать?Если это не так, что я могу сделать?

Ответы [ 2 ]

2 голосов
/ 11 сентября 2010

Следующий код не потеряет ни одной строки из stdout.

var startInfo = new ProcessStartInfo
{
    FileName = "my.exe",
    UseShellExecute = false,
    RedirectStandardOutput = true,
    RedirectStandardError = true
};

using (var process = new Process { StartInfo = startInfo })
{
    process.ErrorDataReceived += (s, e) =>
    {
        string line = e.Data;            
        //process stderr lines

    };

    process.OutputDataReceived += (s, e) =>
    {
        string line = e.Data;
        //process stdout lines
    };

    process.Start();

    process.BeginErrorReadLine();
    process.BeginOutputReadLine();

    process.WaitForExit();
}
2 голосов
/ 11 сентября 2010

Если вы перенаправляете ввод и / или вывод процесса с помощью ProcessStartInfo.RedirectStandardOutput и т. Д., Вывод процесса будет идти непосредственно в ваши потоки. Вы не пропустите ни один ввод или вывод.

...