【问题标题】:Process reuse - async BeginOutputReadLine problem进程重用 - async BeginOutputReadLine 问题
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 不,我重置了 StartInfo 和 Process 字段,但它仍然不起作用。我编写了一个小应用程序(大约 50 行代码)用于测试,没有任何外部可执行文件或代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2021-01-31
    相关资源
    最近更新 更多