繁体   English   中英

Process.StandardOutput流到事件

[英]Process.StandardOutput stream to events

这确实是一个流问题,但是我要专门解决当前的流程问题。

System.Diagnostics.Process将StandardOutput公开为流。 我想收听此流并逐行处理其输出。 显然,输入和输出之间没有直接的相关性,但是让我们添加一点点人工要求,即我们可以“按行”处理输出。

因此,大多数使用它的示例如下所示:

using (Process process = Process.Start(start))
{
    //
    // Read in all the text from the process with the StreamReader.
    //
    using (StreamReader reader = process.StandardOutput)
    {
    string result = reader.ReadToEnd();
    Console.Write(result);
    }
}

这是没有用的,因为它不是事件驱动的,并且假定该进程的寿命刚好足以返回一些输出。 通过事件驱动,它不一定是事件。 Lambda,回调,事件等等,我只想在输出整行时发出通知,并且希望在完成该过程后能够干净地关闭。

本质上,我问的是仅流轮询。

谢谢

您可以使用Process.OutputDataReceived事件接收数据。 使用起来可能很棘手。 搜索它的Stack Overflow,您会发现一些同步问题和陷阱。

通常,您无需轮询流以获取数据。 实际上,据我所知,没有办法进行轮询。 您可以同步或异步读取。 仅当有数据或流耗尽时,您的呼叫才会完成。

在异步情况下,您可以查看作为事件收到的回调。 因此,只需调用BeginReadLine ,这就是您的事件。 或者通过任务来完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM