System.Diagnostics.Process.Start を使用して生成したプロセスの終了を待機するサンプルコードです。無期限に待機する、または待機時間を指定することができます。同期をとるパターンの待機になります。待機中は何らかの処理を行うことはできません。
スポンサーリンク
プロセスの終了を待機する
VB.NET
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
' notepad.exe を起動する
Dim proc As Process = System.Diagnostics.Process.Start("notepad.exe")
'-------------------------------------------------
' ノートパッドが終了するまで無期限で待つ場合
'-------------------------------------------------
'proc.WaitForExit()
'MessageBox.Show("notepad.exe が終了しました。")
'-------------------------------------------------
' 待機する時間を指定(10秒だけ)して待つ場合
'-------------------------------------------------
proc.WaitForExit(10000)
' ノートパッドが終了しているか確認する
If (proc.HasExited = False) Then
' ノートパッドがまだ起動中の場合は、メインウィンドウの
' クローズイベントを発生させる
If (proc.CloseMainWindow() = False) Then
' メインウィンドウ(ノートパッド)がモーダルボックスを表示させているなどして
' 終了できない場合は false がリターンされる
End If
End If
End Sub
C#
private void Form1_Load(object sender, EventArgs e)
{
// ノートパッドを起動する
Process proc = System.Diagnostics.Process.Start("notepad.exe");
//-------------------------------------------------
// ノートパッドが終了するまで無期限で待つ場合
//-------------------------------------------------
//proc.WaitForExit();
//MessageBox.Show("notepad.exe が終了しました。");
//-------------------------------------------------
// 待機する時間を指定(10秒だけ)して待つ場合
//-------------------------------------------------
proc.WaitForExit(10000);
// ノートパッドが終了しているか確認する
if (proc.HasExited == false) {
// ノートパッドがまだ起動中の場合は、メインウィンドウの
//クローズイベントを発生させる
if (proc.CloseMainWindow() == false) {
// メインウィンドウ(ノートパッド)がモーダルボックスを表示させているなどして
// 終了できない場合は false がリターンされる
}
}
}
上記のサンプルコードでは、作成したプロセスの終了を待機しましたが、次に自プロセス自身がスリープ(待機)する方法を確認します。
指定した時間スレッドを停止(スリープ)する
System.Threading.Thread.Sleep を使用して指定した時間スレッドを停止することができます。無期限に停止するにはパラメータに、System.Threading.Timeout.Infinite を与えます。
VB.NET
' 3秒(3000ミリ秒)スレッドをスリープする
System.Threading.Thread.Sleep(3000)
' 無期限にスレッドを停止する
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite)
C#
// 3秒(3000ミリ秒)スリープする
System.Threading.Thread.Sleep(3000);
// 無期限にスレッドを停止する
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
Pingback: [ VB.NET / C# ] プロセスの終了を非同期に捕捉する ( Process.Exited ) – 偏差値40の高い壁