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() ,多載會等候大約 24 天 () 毫秒,而不會無限期地等候 MaxValue 。 此外,如果達到完整 MaxValue 時間,舊版不會等候事件處理常式結束。

此多載可確保所有處理都已完成,包括重新導向標準輸出的非同步事件處理。 當標準輸出重新導向至非同步事件處理常式時, WaitForExit(Int32) 您應該在呼叫多載之後使用此多載。

當相關聯的進程結束 (也就是說,當作業系統透過正常或異常終止) 關閉時,系統會儲存進程的相關系統管理資訊,並傳回已呼叫 WaitForExit() 的元件。 然後,元件 Process 就可以存取包含 的資訊 ExitTime ,方法是使用 Handle 結束的進程。

因為相關聯的進程已結束,所以 Handle 元件的 屬性不再指向現有的進程資源。 相反地,控制碼只能用來存取有關進程資源之作業系統的資訊。 系統會知道元件尚未釋放之已結束進程的控制碼,因此它會將 和 Handle 資訊保留在 ExitTime 記憶體中,直到 Process 元件特別釋放 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 則會傳回給呼叫程式。 您可以針對 milliseconds 指定 Timeout.Infinite ,而且 Process.WaitForExit(Int32) 的行為會與 WaitForExit() 多載相同。 如果您將 0 (零) 傳遞給 方法,則只有在進程已經結束時才會傳回 true ,否則會立即傳 false 回 。

注意

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

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

當相關聯的進程結束 (透過正常或異常終止) 關閉作業系統時,系統會儲存進程的相關系統管理資訊,並返回已呼叫 WaitForExit(Int32) 的元件。 然後,元件 Process 就可以存取包含 的資訊 ExitTime ,方法是使用 Handle 結束的進程。

因為相關聯的進程已結束,所以 Handle 元件的 屬性不再指向現有的進程資源。 相反地,控制碼只能用來存取有關進程資源之作業系統的資訊。 系統會知道元件尚未釋放之已結束進程的控制碼,因此它會將 和 Handle 資訊保留在 ExitTime 記憶體中,直到 Process 元件特別釋放 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) 備註。

適用於