我遇到了一个有趣的问题。
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属性指定的进程资源并将其与组件关联。” )?任何帮助非常感谢。
我认为解决方案是重新创建过程对象,但它可能会更慢。