Суть в том, что размещение p.WaitForExit
неверно;этот вызов метода должен выполняться только после чтения того, что вы хотите из потока.
С MSDN :
// Start the child process.
Process p = new Process();
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "Write500Lines.exe";
p.Start();
// Do not wait for the child process to exit before
// reading to the end of its redirected stream.
// p.WaitForExit();
// Read the output stream first and then wait.
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Также обратите внимание, что вы используете StreamReader sr = p.StandardOutput
здесь избыточно, поскольку, когда установлено значение message
, вы получаете доступ к потоку, используя p.StandardOutput.ReadToEnd();
- обратите внимание на p.StandardOutput
вместо sr.ReadToEnd()
.