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の高い壁