1

次のようなコードがある場合

proc.Start();
string resultOut;

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

proc を開始してからキャプチャ/解析が開始されるまでにいくつかの行を見逃す可能性がありますか? それとも待機しますか? そうでない場合、どうすればよいですか?

4

2 に答える 2

2

次のコードは、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();
}
于 2010-09-10T23:10:44.613 に答える
2

ProcessStartInfo.RedirectStandardOutputなどを介してプロセスの入力および/または出力をリダイレクトしている場合、プロセスの出力はストリームに直接送られます。入力や出力を見逃すことはありません。

于 2010-09-10T20:23:33.540 に答える