[ VB.NET / C# ] プロセスの終了を待機する ( Process.WaitForExit )

Pocket

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);
参考
スポンサーリンク


Pocket

One thought on “[ VB.NET / C# ] プロセスの終了を待機する ( Process.WaitForExit )”

  1. Pingback: [ VB.NET / C# ] プロセスの終了を非同期に捕捉する ( Process.Exited ) – 偏差値40の高い壁

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>