流程重用-异步BeginOutputReadLine问题

本文关键字:BeginOutputReadLine 问题 异步 程重用 | 更新日期: 2023-09-27 18:09:50

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

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组件的StartInfo属性指定的进程资源,并将其与组件关联")?如有任何帮助,不胜感激。

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

流程重用-异步BeginOutputReadLine问题

调用Kill需要在调用Start之前再次添加OutputDataReceived的事件处理程序

相关文章:
  • 没有找到相关文章