次のようなコードがある場合
proc.Start();
string resultOut;
while ( (!proc.HasExited && (resultOut = stdOut.ReadLine()) != null))
{
// Do some operation based on resultOut
}
proc を開始してからキャプチャ/解析が開始されるまでにいくつかの行を見逃す可能性がありますか? それとも待機しますか? そうでない場合、どうすればよいですか?
次のようなコードがある場合
proc.Start();
string resultOut;
while ( (!proc.HasExited && (resultOut = stdOut.ReadLine()) != null))
{
// Do some operation based on resultOut
}
proc を開始してからキャプチャ/解析が開始されるまでにいくつかの行を見逃す可能性がありますか? それとも待機しますか? そうでない場合、どうすればよいですか?
次のコードは、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();
}
ProcessStartInfo.RedirectStandardOutputなどを介してプロセスの入力および/または出力をリダイレクトしている場合、プロセスの出力はストリームに直接送られます。入力や出力を見逃すことはありません。