引言:今天好郁闷啊,把手机给摔了,问了一下官网维修点,得花500大洋,我这是造的什么孽啊啊啊啊啊啊啊。。。。。。。。。。。。。。
回到正题,之前C#调用cmd,读取GDAL输出的结果,一直好好的。直到今天,从GDB导出的一个shp,用cmd调用,死活读不出来,当程序走到 Process.WaitForExit();就不动了(假死),查了一下,好多人都遇到了这问题,试了各种回答,都没用。最后查看官网文档,终于找到了解决方案,贴一下教程
地址。
其实关于线程假死的,微软官方给出了两种解决办法,我们依次来看。
1.
calling p.StandardError.ReadToEnd before p.WaitForExit
在调用
p.WaitForExit之前调用
p.WaitForExit,这种方式是同步读取,注意下图中红色框线内的调用顺序。
2.
performing asynchronous read operations on the StandardError stream
用异步的方式去读取
StandardError ,
同样的,注意下图中用红色框线框起来的内容。
第二种方式下面给出了一段说明,我们来看下:
总结:现在我们网络上能看到关于这个问题的各种回答,但是大都没有回到本质上来,其实就是犯了上面说的这个错误。
值得注意的是,上面的第一种解决方案,只能读取cmd的输出,不能读取cmd的输入。第二种方式输入和输出都可以读取。好了,本次教程就分享到这里,我们下次再会。