失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C#调用cmd出现Process线程假死或阻塞现象的官方解决方案

C#调用cmd出现Process线程假死或阻塞现象的官方解决方案

时间:2022-03-08 22:34:40

相关推荐

C#调用cmd出现Process线程假死或阻塞现象的官方解决方案

引言:今天好郁闷啊,把手机给摔了,问了一下官网维修点,得花500大洋,我这是造的什么孽啊啊啊啊啊啊啊。。。。。。。。。。。。。。 回到正题,之前C#调用cmd,读取GDAL输出的结果,一直好好的。直到今天,从GDB导出的一个shp,用cmd调用,死活读不出来,当程序走到 Process.WaitForExit();就不动了(假死),查了一下,好多人都遇到了这问题,试了各种回答,都没用。最后查看官网文档,终于找到了解决方案,贴一下教程地址。 其实关于线程假死的,微软官方给出了两种解决办法,我们依次来看。 1.callingp.StandardError.ReadToEndbeforep.WaitForExit在调用p.WaitForExit之前调用p.WaitForExit,这种方式是同步读取,注意下图中红色框线内的调用顺序。

2.performing asynchronous read operations on theStandardError stream用异步的方式去读取StandardError ,同样的,注意下图中用红色框线框起来的内容。

第二种方式下面给出了一段说明,我们来看下:

什么意思呢?意思就是你不能一会儿同步读取,一会儿异步读取,你开始采用的是同步读取,你后面就要一直使用同步读取。你开始使用的是异步读取,你后面就要一直使用异步读取。混合着用就容易出现假死的状态。 总结:现在我们网络上能看到关于这个问题的各种回答,但是大都没有回到本质上来,其实就是犯了上面说的这个错误。值得注意的是,上面的第一种解决方案,只能读取cmd的输出,不能读取cmd的输入。第二种方式输入和输出都可以读取。好了,本次教程就分享到这里,我们下次再会。

如果觉得《C#调用cmd出现Process线程假死或阻塞现象的官方解决方案》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。