プロセスの終了を待つ

Web検索はbingがおすすめ!

他のプログラムの実行の終了を待つ - C#

他のプログラムの実行の終了を待つコードを紹介します。

概要

ほかのexeファイルを実行し終了を待つ場合にはProcessクラスのWaitForExitメソッドを用います。

プログラム例

Windows Formアプリケーションを作成します。

UI

下図のフォームを作成します。今回の例では、使用するボタンは1つのみです。

コード

下記のコードを記述します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace ExecApplication
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void button3_Click(object sender, EventArgs e)
    {
      Process proc = Process.Start("notepad.exe");
      proc.WaitForExit();
      textBox1.Text += "notepad.exeが終了しました\r\n";
    }
  }
}

解説

button3をクリックするとメモ帳(notepad.exe)を起動します。メモ帳を閉じるとテキストボックスに「notepad.exeが終了しました」というメッセージが表示されます。

実行結果

上記のプロジェクトを実行します。下図のウィンドウが表示されます。


上記のコードを実装したボタン(今回の例では[button3])をクリックします。メモ帳が起動しメモ帳のウィンドウが表示されます。


メモ帳のウィンドウを閉じ、アプリケーションを終了するとテキストボックスに「"notepad.exeが終了しました」メッセージが表示されます。
アプリケーションの終了を待つ処理が実装できました。

メインスレッドのブロック

今回紹介した方法では、アプリケーションを待機している間はメインスレッドがブロックされた状態で待ちます。 メモ帳が起動している間は、アプリケーションのウィンドウはロックされた状態で操作できなくなる点に注意が必要です。
(起動側のアプリケーションのボタンが押されたままの状態になっていることが確認できます。)

補足
アプリケーション実行中でもウィンドウが操作できるようにするためには、非同期で終了を待機する実装をする必要があります。 アプリケーションの終了を非同期で待つ方法はこちらの記事を参照して下さい。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2010-08-15
iPentec all rights reserverd.