流程重用-异步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属性指定的进程资源,并将其与组件关联")?如有任何帮助,不胜感激。
我认为解决方案是重新创建进程对象,但它可能会慢一些。
调用Kill
需要在调用Start
之前再次添加OutputDataReceived
的事件处理程序