Process.StandardOutput流到事件

时间:2015-01-26 11:29:36

标签: c#

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

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,回调,事件,无论如何,当输出整行时我只想要通知我希望能够在完成这个过程时干净地关闭。

基本上我只是询问流投票。

由于

1 个答案:

答案 0 :(得分:1)

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

通常,您永远不需要轮询数据流。事实上,就我所知,没有办法进行民意调查。您可以同步或异步读取。只有在有数据或流量耗尽时才会完成您的通话。

在异步情况下,您可以查看作为事件收到的回调。所以,只需致电BeginReadLine即可。或者用任务完成。