Process.WaitForExit 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
設定要等待相關的處理序結束的時間,並且阻止目前的執行緒執行,直到等候時間耗盡或者處理序已經結束為止。 為避免封鎖目前的執行緒,請使用 Exited 事件。
對於程式碼範例,請參閱 StandardError 與 ExitCode 屬性參考頁面。
多載
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
則會傳回給呼叫程式。 您可以指定 milliseconds
, Timeout.Infinite 且 Process.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) 備註。