Process.WaitForExit 方法

定义

设置等待关联进程退出的时间段,并在该段时间结束前或该进程退出前,阻止当前线程执行。 若要避免妨碍当前线程,请使用 Exited 事件。

有关代码示例,请参阅 StandardErrorExitCode 属性参考页。

重载

WaitForExit()

指示 Process 组件无限期地等待关联进程退出。

WaitForExit(Int32)

指示 Process 组件在指定的毫秒数内等待关联进程退出。

WaitForExit(TimeSpan)

指示进程组件等待指定的时间量,使关联的进程退出。

WaitForExit()

Source:
Process.cs
Source:
Process.cs
Source:
Process.cs

指示 Process 组件无限期地等待关联进程退出。

public:
 void WaitForExit();
public void WaitForExit ();
member this.WaitForExit : unit -> unit
Public Sub WaitForExit ()

例外

无法访问等待设置。

尚未设置进程 Id,而且不存在可从其确定 Id 属性的 Handle

没有与此 Process 对象关联的进程。

你正尝试为远程计算机上运行的进程调用 WaitForExit() 。 此方法仅对本地计算机上运行的进程可用。

示例

请参阅属性引用页的“备注” StandardError 部分。

注解

WaitForExit() 使当前线程等待,直到关联的进程终止。 应在进程上调用所有其他方法之后调用它。 若要避免妨碍当前线程,请使用 Exited 事件。

此方法指示 Process 组件等待进程和事件处理程序退出的无限时间。 这可能会导致应用程序停止响应。 例如,如果调用 CloseMainWindow 具有用户界面的进程,则如果进程写入为永不进入其消息循环,则可能不会处理对操作系统终止关联进程的请求。

注意

在 .NET Framework 3.5 及更早版本中,WaitForExit()重载MaxValue () 等待了大约 24 天,而不是无限期等待。 此外,如果达到整个 MaxValue 时间,以前的版本不会等待事件处理程序退出。

此重载可确保已完成所有处理,包括处理重定向的标准输出的异步事件。 当标准输出已重定向到异步事件处理程序时, WaitForExit(Int32) 应在调用重载后使用此重载。

当关联的进程退出 (即当操作系统通过正常或异常终止) 将其关闭时,系统会存储有关该进程的管理信息,并返回到已调用 WaitForExit()的组件。 然后,组件Process可以使用 到退出的进程来访问包括 ExitTimeHandle 的信息。

由于关联的进程已退出, Handle 因此组件的 属性不再指向现有进程资源。 相反,句柄只能用于访问操作系统有关进程资源的信息。 系统知道组件尚未释放Process的已退出进程的句柄,因此它会将 和 Handle 信息保留在ExitTime内存中Process,直到组件专门释放资源。 出于此原因,每当调用StartProcess实例时,在关联进程已终止且不再需要有关它的任何管理信息时调用 CloseClose 释放分配给退出进程的内存。

另请参阅

适用于

WaitForExit(Int32)

Source:
Process.cs
Source:
Process.cs
Source:
Process.cs

指示 Process 组件在指定的毫秒数内等待关联进程退出。

public:
 bool WaitForExit(int milliseconds);
public bool WaitForExit (int milliseconds);
member this.WaitForExit : int -> bool
Public Function WaitForExit (milliseconds As Integer) As Boolean

参数

milliseconds
Int32

等待关联进程退出的时间(以毫秒为单位)。 0 值指定立即返回,而 -1 值则指定无限期等待。

返回

如果关联进程已退出,则为 true;否则为 false

例外

无法访问等待设置。

尚未设置进程 Id,而且不存在可从其确定 Id 属性的 Handle

没有与此 Process 对象关联的进程。

你正尝试为远程计算机上运行的进程调用 WaitForExit(Int32) 。 此方法仅对本地计算机上运行的进程可用。

milliseconds 是一个非 -1 的负数,而 -1 表示无限期超时。

示例

请参阅 属性的 ExitCode 代码示例。

注解

WaitForExit(Int32) 使当前线程等待,直到关联的进程终止。 应在进程上调用所有其他方法之后调用它。 若要避免妨碍当前线程,请使用 Exited 事件。

此方法指示 Process 组件等待进程退出的有限时间。 如果关联的进程由于终止请求被拒绝而未在间隔结束时退出, false 则会返回到调用过程。 可以为 指定 Timeout.Infinitemilliseconds,其 Process.WaitForExit(Int32) 行为与重载相同 WaitForExit() 。 如果将 0 (零) 传递给 方法,则仅当进程已退出时才返回 true ;否则,它会立即返回 false

注意

在 .NET Framework 3.5 及更早版本中,如果 milliseconds 为 -1,则WaitForExit(Int32)重载MaxValue (等待大约 24 天) ,而不是无限期等待。

当标准输出已重定向到异步事件处理程序时,当此方法返回时,输出处理可能尚未完成。 若要确保异步事件处理已完成,请在 WaitForExit() 从此重载接收 true 后调用不采用参数的重载。 若要帮助确保在 Exited Windows 窗体 应用程序中正确处理事件,请设置 SynchronizingObject 属性。

当关联的进程退出 (操作系统通过正常或异常终止) 关闭时,系统会存储有关进程的管理信息,并返回到已调用 WaitForExit(Int32)的组件。 然后,组件Process可以使用 到退出的进程来访问包括 ExitTimeHandle 的信息。

由于关联的进程已退出, Handle 因此组件的 属性不再指向现有进程资源。 相反,句柄只能用于访问操作系统有关进程资源的信息。 系统知道组件尚未释放Process的已退出进程的句柄,因此它会将 和 Handle 信息保留在ExitTime内存中Process,直到组件专门释放资源。 出于此原因,每当调用StartProcess实例时,在关联进程已终止且不再需要有关它的任何管理信息时调用 CloseClose 释放分配给退出进程的内存。

另请参阅

适用于

WaitForExit(TimeSpan)

Source:
Process.cs
Source:
Process.cs
Source:
Process.cs

指示进程组件等待指定的时间量,使关联的进程退出。

public:
 bool WaitForExit(TimeSpan timeout);
public bool WaitForExit (TimeSpan timeout);
member this.WaitForExit : TimeSpan -> bool
Public Function WaitForExit (timeout As TimeSpan) As Boolean

参数

timeout
TimeSpan

等待关联进程退出的时间量。

返回

如果关联进程已退出,则为 true;否则为 false

注解

请参阅 WaitForExit(Int32) 备注。

适用于