準備
1. プロジェクトのプロパティを開き、設定タブを開きます。
2. 名前に FileName と入力し、型は string を使用します。値は空欄とします。
3. プロパティを閉じます。
デザイン
1. フォーム (Form1) にボタン (button1) を配置します。
2. フォーム (Form1) にボタン (button2) を配置します。
サンプルコード (C#)
// 名前空間の追加
using System.Diagnostics;
using System.Threading;
// コード
private void button1_Click(object sender, EventArgs e)
{
ThreadStart ts = new ThreadStart(CalcExec);
Thread thread = new Thread(ts);
thread.Start();
button1.Text = "電卓実行中...";
while (thread.IsAlive)
{
Application.DoEvents();
}
button1.Text = "button1";
}
private void CalcExec()
{
Process ps = new Process();
ps.StartInfo.FileName = "calc.exe";
ps.Start();
ps.WaitForExit();
}
解説
スレッドを作成して電卓を起動するメソッドを実行します。このメソッド内で電卓が終了するまで待機しています。通常は WaitForExit メソッドを発行すると、アプリケーションが固まってしまう状態になりますが、この場合には、別スレッドで処理していることなので問題ありません。メソッドが終了すると、スレッドも終了となり、スレッドの IsAlive プロパティが false に変わります。
結果

動作確認環境
Visual Studio 2015 Professional (C# 6.0)