原文地址: https://www.jeremyjone.com/518/, 转载请注明。
项目中使用ffprobe插件读取视频信息,不用想,肯定要是用Process创建进程,然后使用StandardOuput接收输出。然而在测试的时候,发现程序一直卡在ffprobe的进程。
我试过的方案
1、看到有人说需要把p.StandardOutput.ReadToEnd()
放到p.WaitForExit()
后面,还信誓旦旦的说,如果放在之前,会接收不到任何信息,因为ReadToEnd()
是同步函数。
- 然后我上官方文档查看了一下,确认
ReadToEnd()
同时支持同步和异步,所以根本不对。而且官方文档也是将p.StandardOutput.ReadToEnd()
放到p.WaitForExit()
前面使用的。
2、使用StandardError
接收信息。有人说试了好长时间,StandardOutput
不会接收到任何信息,反而使用StandardError
能顺利接收到信息。
- 我尝试了一下,纯属胡扯。我同样接收不到任何消息。这样做的人是这样解释的:
StandardOutput
属于同步,StandardError
属于异步,所以使用StandardError
可以接收信息。根据第一种失败的方案得到的结论,这个方案同样失