首页 新闻 搜索 专区 学院

Process.WaitForExit阻塞时间

0
悬赏园豆:100 [已解决问题] 解决于 2014-03-12 09:19

现象:

Process.WaitForExit启动程序后,闲置启动程序。几分钟后报异常

未指定的错误 (异常来自 HRESULT:0x80004005 (E_FAIL))
在 System.Threading.SynchronizationContext.WaitHelper(IntPtr[] waitHandles, Boolean waitAll, Int32 millisecondsTimeout)
在 System.Windows.Threading.DispatcherSynchronizationContext.Wait(IntPtr[] waitHandles, Boolean waitAll, Int32 millisecondsTimeout)
在 System.Threading.SynchronizationContext.InvokeWaitMethodHelper(SynchronizationContext syncContext, IntPtr[] waitHandles, Boolean waitAll, Int32 millisecondsTimeout)
在 System.Threading.WaitHandle.WaitOneNative(SafeHandle waitableSafeHandle, UInt32 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext)
在 System.Threading.WaitHandle.InternalWaitOne(SafeHandle waitableSafeHandle, Int64 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext)
在 System.Threading.WaitHandle.WaitOne(Int32 millisecondsTimeout, Boolean exitContext)
在 System.Diagnostics.Process.WaitForExit(Int32 milliseconds)
在 System.Diagnostics.Process.WaitForExit()

问题1:Process.WaitForExit()是否存在阻塞时间?

问题2:如果有阻塞时间是否能设置?

 

开发环境为 vs2010 framework4.0

天天吃辣椒的主页 天天吃辣椒 | 初学一级 | 园豆:114
提问于:2014-03-11 16:19
< >
分享
最佳答案
0
收获园豆:100
Launcher | 高人七级 |园豆:45045 | 2014-03-11 16:49

   你的意思是缓冲区满了?

天天吃辣椒 | 园豆:114 (初学一级) | 2014-03-11 16:53

@天天吃辣椒: 我的意思是你得根据你的程序的实际情况来看,比如缓冲区满了也会造成死锁,WaitForExit 肯定是会阻塞的,请看这里:http://msdn.microsoft.com/en-us/library/fb4aw7b8(v=vs.110).aspx,其有默认超时,注意读注释,同时还提供一个重载版本,让你可以自己定义超时时间:http://msdn.microsoft.com/en-us/library/ty0d8k56(v=vs.110).aspx

Launcher | 园豆:45045 (高人七级) | 2014-03-11 16:59

@Launcher: 情况不太一样,WaitForExit(Int32)重载是阻塞关联时间。如果到时间,将不产生阻塞。

我现在的问题是我需要一直阻塞,但不操作新开的程序,过几分钟就会报我提的那个异常。而且在不同的操作系统异常也不同。

天天吃辣椒 | 园豆:114 (初学一级) | 2014-03-11 17:07

@天天吃辣椒: 请问你 Process.Start 的什么程序?你能否换成启动 notepad.exe 测试下?

Launcher | 园豆:45045 (高人七级) | 2014-03-11 17:11

@Launcher: 不好意思,可能是我我提的问题有歧义。启动的是一个带PB写的界面的程序,这个程序不会向缓冲区写入数据。我想要实现的功能是,启动这个程序并等待用户主动关闭。但,过几分钟后我就能接收到异常,并使阻塞消失。

天天吃辣椒 | 园豆:114 (初学一级) | 2014-03-11 17:17

@天天吃辣椒: 不好意思,我问了两个问题,我再把第二个问题重复一遍:如果启动 notepad.exe,等待几分钟也会接收到异常吗?

Launcher | 园豆:45045 (高人七级) | 2014-03-11 17:33

@Launcher: 不会接收到异常,我重定向的lOutput缓冲区。现在看起来的效果不错。个人感觉是PB程序向缓冲区写入了数据。

天天吃辣椒 | 园豆:114 (初学一级) | 2014-03-11 21:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册