进程重用 - 异步BeginOutputReadLine问题

时间:2011-09-28 09:59:30

标签: c# asynchronous process reusability

我遇到了一个有趣的问题。

C#允许重用进程资源(根据MSDN) - 所以我在进程完成后调用实例Start()方法:

Process p = new Process();
// init
p.Start();

过了一段时间后:

p.Kill();
// not important
p.Start();

当我有一个执行同步读取的线程时,一切似乎都没问题 - 在第一次和第二次Start()调用之后正在读取输出。


现在有趣的事情。当我使用异步读取(所有内容都正确初始化)时:

p.BeginOutputReadLine();

仅在第一次Start()调用后才读取输出。在第二次调用过程开始后,没有任何输出被重定向。

我也尝试过再次调用取消和开始:

p.CancelOutputRead();
p.Kill();
// not important
p.Start();
p.BeginOutputReadLine();

同样的结果。

一些机器细节:Win 7 Ultimate x86 SP1(CPU也是x86),在.NET 2.0 / 3.0,VS 2008上测试

问题是 - 是一些框架错误还是我对Process.Start定义的误解(“启动(或重用)由此Process组件的StartInfo属性指定的进程资源并将其与组件关联。” )?任何帮助非常感谢。

我认为解决方案是重新创建过程对象,但它可能会更慢。

1 个答案:

答案 0 :(得分:0)

调用Kill后,您需要在调用Start之前再次为OutputDataReceived添加事件处理程序。