重定向输出时ResGen.exe卡住了

Dar*_*qer 3 c# process

我尝试重定向ResGen.exe的标准输出.我使用以下代码

ProcessStartInfo psi = new ProcessStartInfo( "resxGen.exe" );
psi.CreateNoWindow = true;
psi.Arguments = sb.ToString();
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
Process p = Process.Start( psi );
p.WaitForExit();
StreamReader sr = p.StandardOutput;
string message = p.StandardOutput.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

它停留在p.WaitForExit上.当我关闭输出流重定向并且不读取StandardOutput时,它可以正常工作.

我做错了什么?

Can*_*cer 5

您需要在读取流后等待进程结束,否则您的代码中会出现死锁.问题是您的父进程阻塞等待子进程完成,并且子进程正在等待父进程读取输出,因此您有一个死锁.

是对问题的详细而详细的描述.

像这样更改代码可以避免死锁:

StreamReader sr = p.StandardOutput;
string message = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Run Code Online (Sandbox Code Playgroud)