查看文章 |
c# System.Diagnostics.Process 调用外部程序时WaitForExit锁死问题分析及解决方案
2011年02月01日 星期二 19:59
最近在写程序时发现了一个很有意思的bug,使用System.Diagnostics.Process 调用rar来压缩文件夹时线程一直定在WaitForExit()处。也就是卡死了啊,而且死的很难看啊。 后来尝试压缩文件少的 文件夹时,它竟然还活着,妈呀,这是什么问题啊!!郁闷至极啊,后来参考官方给出信息发现了一个很有意思的地方,此类提供的标准output流只有2k,崩溃啊,什么意思呢,要不你不要把信息写入输出流,要不你在写满2k后必须把数据拿走,否则老子就罢工不干了。。。的确很霸道啊,由微软的风格。 问题怎么解决呢?知道原因就好办了, 1.关闭输出重定向,这样也很悲剧,我们想看的东西就看不到了哦,没办法被逼的! 实例名.StartInfo.RedirectStandardOutput = false; 2.在程序中手动读出输出流 实例名.StandardOutput.ReadToEnd(),这是比较科学的方法,在每次执行等待前后都手动的读取一下。
这样基本可以解决大部分问题了。
作者:烨炫 烨炫原创文章,转载任意,但请注明出处~~ |
最近读者:

