[英]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.