【发布时间】:2014-02-05 12:40:07
【问题描述】:
现在我正在开发一个 Console Runner 应用程序,该应用程序具有以下代码来输出日志并等待该过程完成:
using (Process p = Process.Start(ps))
{
p.OutputDataReceived += OutputReceived;
p.ErrorDataReceived += ErrorReceived;
p.BeginOutputReadLine();
p.BeginErrorReadLine();
p.WaitForExit(30000);
return p.ExitCode;
}
我对这段代码有两个问题。
- 我注意到,如果处理时间超过 30 秒,调用 p.ExitCode 就会爆炸。
- 如果我的进程只需要 1 秒会发生什么,它会等待 30 秒还是 CLR 会通知该进程?
【问题讨论】:
-
他们在文档中隐藏了这些秘密:"如果您在进程退出之前尝试获取 ExitCode,则该尝试会引发异常。首先检查 HasExited 属性以验证关联的进程是否已终止。" 和 "WaitForExit ... 并阻塞当前执行线程,直到时间过去或进程退出"
-
我也找到了它,但我不确定我是否正确阅读了它。因此,如果进程在 WaitForExit 内的时间戳之前退出似乎没有问题,但反过来会导致一个很好的异常。谢谢