【发布时间】:2011-11-26 17:50:08
【问题描述】:
我遇到了一个有趣的问题。
C# 允许重用进程资源(根据 MSDN) - 所以我在进程完成后调用实例 Start() 方法:
Process p = new Process();
// init
p.Start();
一段时间后:
p.Kill();
// not important
p.Start();
当我有一个线程执行同步读取时,一切似乎都正常 - 在第一次和第二次 Start() 调用之后正在读取输出。
现在有趣的事情。当我使用异步读取(一切都正确初始化):
p.BeginOutputReadLine();
仅在第一次 Start() 调用后才读取输出。在第二次调用过程开始后,没有任何输出被重定向。
我也尝试过再次调用 Cancel 和 Begin:
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 属性指定的流程资源并将其与组件相关联。” )?非常感谢任何帮助。
我认为解决方案是重新创建进程对象,但它可能会更慢。
【问题讨论】:
标签: c# asynchronous process reusability