首页 > 解决方案 > 使用 Process 类的 CancelOutputRead 方法,正确的方法?

问题描述

当我调试一个启动这样的子进程的类时,我偶然发现了以下代码

process.Start();
//Attached event handlers for ErrorDataReceived and OutputDataReceived events
process.BeginErrorReadLine();
process.BeginOutputReadLine();
//Some other logic
process.CancelErrorRead();
process.CancelOutputRead();
//Process is still running from here on..

我正在做这个练习,因为子进程在一段时间后停止响应。删除最后两行代码可以解决问题,但我无法解释解决的原因。

MSDN 有这个

当您调用 CancelErrorRead 时,所有正在进行的 StandardError 读取操作都已完成,然后事件处理程序被禁用。所有进一步重定向到 StandardError 的输出都保存在缓冲区中

所以我的问题是

当缓冲区已满时,进程会发生什么?

缓冲区的大小是多少?

进程是否因为达到缓冲区限制并且没有工作线程从中读取而变得无响应?

我怎样才能证实我的理论?

我在网上找不到太多信息,所以希望有人能指出我正确的方向。

提前感谢您的帮助。

标签: c#.netmultithreadingprocess

解决方案


推荐阅读