RedirectStandardOutput是否阻止了Process.Exited事件的引发?

时间:2012-10-13 21:31:27

标签: c# process

我想要的只是将进程的标准输出重定向到文件。听起来很简单,但我尝试的一切都不起作用:

  1. 在参数列表中放置DOS样式的重定向(例如param1 param2 > output.txt)不起作用;

  2. 使用RedirectStandardOutput = true有效,但是,显然该进程在存在时不会引发事件。因此,通过process.Exited += ...定义的处理程序不会执行。需要说明的是,一旦我删除RedirectStandardOutput = true语句,它就会举起一个事件。

  3. 我做错了什么?

1 个答案:

答案 0 :(得分:1)

方法#2必须是要走的路 问题似乎是由输出缓冲引起的,这会阻止触发Exited事件。

您应该考虑删除Exited事件处理程序。相反,订阅OutputDataReceived事件并检查处理程序中的Process.HasExited属性以执行清理作业:

process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);

...

void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    Process p = (Process) sender;
    if(p.HasExited) ...
}