我尝试重定向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时,它可以正常工作.
我做错了什么?
您需要在读取流后等待进程结束,否则您的代码中会出现死锁.问题是您的父进程阻塞等待子进程完成,并且子进程正在等待父进程读取输出,因此您有一个死锁.
这是对问题的详细而详细的描述.
像这样更改代码可以避免死锁:
StreamReader sr = p.StandardOutput;
string message = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
681 次 |
| 最近记录: |