这个问题令我感到困惑。
当我第二次运行Process时,尝试取消上一个读取行时出现错误,如下所示:
然而,这是事情变得时髦的地方。如果我“物理”将执行点移动到“BeginErrorReadLine()”它应该正常工作?因为没有正在进行的异步操作吗?
错误!
这......只是令人难以置信,我不知道如何解决它; _;
答案 0 :(得分:1)
这是因为您尝试重新使用Process对象。这不是一个有效的事情,许多.NET类都以这种方式运行。像线程,表单,套接字等。你只使用它们的一个对象,当你使用它们时,你应该Dispose()对象并创建一个新对象,如果你想再做同样的事情。
第一个进程停止运行后,_process
变成僵尸。 其属性的某些仍然有用,例如,您可以使用ExitCode来发现它的结束方式,ExitTime可以找出发生的时间。但这就是它结束的地方,对象不再对其他任何东西有用,应该被处理掉。您在CancelErrorRead()上获得异常,因为您已完成读取错误输出。还有BeginErrorReadLine()上的异常,因为你已经为第一个进程调用了它。
您必须提前插入此行,可能会修补一些我们看不到的其他代码:
_process = new Process();
赞成其退出事件来处理清理工作。