Process.WaitForExit 方法

定義

設定要等待相關的處理序結束的時間,並且阻止目前的執行緒執行,直到等候時間耗盡或者處理序已經結束為止。 為避免封鎖目前的執行緒,請使用 Exited 事件。

對於程式碼範例,請參閱 StandardErrorExitCode 屬性參考頁面。

多載

WaitForExit()

指示 Process 元件無限期等候相關聯處理序結束。

WaitForExit(Int32)

指示 Process 元件等候相關聯處理序結束的指定毫秒數。

WaitForExit(TimeSpan)

指示進程元件等候指定的時間量,讓相關聯的進程結束。

WaitForExit()

來源:
Process.cs
來源:
Process.cs
來源:
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 實例時,請在相關聯的進程終止時呼叫 Close ,而且您不再需要其任何系統管理資訊。 Close 釋放配置給已結束進程的記憶體。

另請參閱

適用於

WaitForExit(Int32)

來源:
Process.cs
來源:
Process.cs
來源:
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 以外的負數,表示無限逾時。

範例

請參閱 屬性的程式 ExitCode 代碼範例。

備註

WaitForExit(Int32) 讓目前的線程等到相關聯的進程終止為止。 在進程上呼叫所有其他方法之後,應該呼叫它。 為避免封鎖目前的執行緒,請使用 Exited 事件。

這個方法會 Process 指示元件等候有限的時間,讓進程結束。 如果關聯的進程未在間隔結束時結束,因為拒絕終止的要求, false 則會傳回給呼叫程式。 您可以指定 millisecondsTimeout.InfiniteProcess.WaitForExit(Int32) 的行為會與WaitForExit()多載相同。 如果您將 0 (零) 傳遞至 方法, true 則只有在行程已經結束時才會傳回 ,否則會立即傳 false回 。

注意

在 .NET Framework 3.5 和較舊版本中,如果 milliseconds 為 -1,則WaitForExit(Int32)多載會等候MaxValue大約 24 天 () ,而不是無限期。

當標準輸出重新導向至異步事件處理程式時,當這個方法傳回時,輸出處理可能不會完成。 若要確保異步事件處理已完成,請在 WaitForExit() 從這個多載接收 true 之後呼叫不採用參數的多載。 若要協助確保Exited事件在 Windows Forms 應用程式中正確處理,請設定 SynchronizingObject 屬性。

當相關聯的進程結束 (透過正常或異常終止) 關閉作業系統時,系統會儲存處理程式的系統管理資訊,並返回呼叫 WaitForExit(Int32)的元件。 接著,元件Process可以使用 至已結束的進程來存取包含的資訊ExitTimeHandle

因為相關聯的進程已結束,所以 Handle 元件的 屬性不再指向現有的進程資源。 相反地,句柄只能用來存取操作系統有關進程資源的資訊。 系統會知道元件尚未釋放Process之已結束進程的句柄,因此它會將 和 Handle 資訊保留在ExitTime記憶體中,直到Process元件特別釋放資源為止。 基於這個理由,每當您呼叫 StartProcess 實例時,請在相關聯的進程終止時呼叫 Close ,而且您不再需要其任何系統管理資訊。 Close 釋放配置給已結束進程的記憶體。

另請參閱

適用於

WaitForExit(TimeSpan)

來源:
Process.cs
來源:
Process.cs
來源:
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) 備註。

適用於