查看文章
 
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(),这是比较科学的方法,在每次执行等待前后都手动的读取一下。

 

这样基本可以解决大部分问题了。

 

作者:烨炫

烨炫原创文章,转载任意,但请注明出处~~
本文原始地址:http://hi.baidu.com/rabby163/blog/item/9cfd5aea86de43c0d539c909.html


类别:默认分类||添加到搜藏 |分享到i贴吧|浏览(547)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu