现象:
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
你的意思是缓冲区满了?
@天天吃辣椒: 我的意思是你得根据你的程序的实际情况来看,比如缓冲区满了也会造成死锁,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: 情况不太一样,WaitForExit(Int32)重载是阻塞关联时间。如果到时间,将不产生阻塞。
我现在的问题是我需要一直阻塞,但不操作新开的程序,过几分钟就会报我提的那个异常。而且在不同的操作系统异常也不同。
@天天吃辣椒: 请问你 Process.Start 的什么程序?你能否换成启动 notepad.exe 测试下?
@Launcher: 不好意思,可能是我我提的问题有歧义。启动的是一个带PB写的界面的程序,这个程序不会向缓冲区写入数据。我想要实现的功能是,启动这个程序并等待用户主动关闭。但,过几分钟后我就能接收到异常,并使阻塞消失。
@天天吃辣椒: 不好意思,我问了两个问题,我再把第二个问题重复一遍:如果启动 notepad.exe,等待几分钟也会接收到异常吗?
@Launcher: 不会接收到异常,我重定向的lOutput缓冲区。现在看起来的效果不错。个人感觉是PB程序向缓冲区写入了数据。