C#进程:无法在第二次运行时使用BeginOutputReadLine并且无法取消OutOutputRead

时间:2015-07-19 08:02:36

标签: c# exception asynchronous process

这个问题令我感到困惑。

当我第二次运行Process时,尝试取消上一个读取行时出现错误,如下所示:

Exception on CancelErrorRead because no async read operation is in progress

然而,这是事情变得时髦的地方。如果我“物理”将执行点移动到“BeginErrorReadLine()”它应该正常工作?因为没有正在进行的异步操作吗?

错误!

Exception on BeginErrorReadLine because async operations are in progress

这......只是令人难以置信,我不知道如何解决它; _;

1 个答案:

答案 0 :(得分:1)

这是因为您尝试重新使用Process对象。这不是一个有效的事情,许多.NET类都以这种方式运行。像线程,表单,套接字等。你只使用它们的一个对象,当你使用它们时,你应该Dispose()对象并创建一个新对象,如果你想再做同样的事情。

第一个进程停止运行后,_process变成僵尸。 其属性的某些仍然有用,例如,您可以使用ExitCode来发现它的结束方式,ExitTime可以找出发生的时间。但这就是它结束的地方,对象不再对其他任何东西有用,应该被处理掉。您在CancelErrorRead()上获得异常,因为您已完成读取错误输出。还有BeginErrorReadLine()上的异常,因为你已经为第一个进程调用了它。

您必须提前插入此行,可能会修补一些我们看不到的其他代码:

  _process = new Process();

赞成其退出事件来处理清理工作。