C#使用Process的StandardOutput遇到阻塞的问题及解决方案

在项目中使用ffprobe通过C#的Process获取视频信息时遇到进程阻塞问题。尝试了调整StandardOutput的读取时机、使用BeginOutputReadLine等方案均未成功。最终解决方案是,在读取完StandardOutput后手动关闭它,从而解决了阻塞问题。
摘要由CSDN通过智能技术生成

原文地址: 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可以接收信息。根据第一种失败的方案得到的结论,这个方案同样失
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值