法官的博客 发表于 2013-1-2 23:05:12

C#启动外部程序的几种方法以及等待外部程序关闭的方法

<div id="cnblogs_post_body">1. 启动外部程序,不等待其退出。

2. 启动外部程序,等待其退出。

3. 启动外部程序,无限等待其退出。

4. 启动外部程序,通过事件监视其退出。
<div class="cnblogs_code">// using System.Diagnostics;private string appName = "calc.exe";/// <summary>/// 1. 启动外部程序,不等待其退出/// </summary>private void button1_Click(object sender, EventArgs e){    Process.Start(appName);    MessageBox.Show(String.Format("外部程序 {0} 启动完成!", this.appName), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);}/// <summary>/// 2. 启动外部程序,等待其退出/// </summary>private void button2_Click(object sender, EventArgs e){    try    {      Process proc = Process.Start(appName);      if (proc != null)      {            proc.WaitForExit(3000);            if (proc.HasExited)            {                MessageBox.Show(String.Format("外部程序 {0} 已经退出!", this.appName), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);            }            else            {                // 如果外部程序没有结束运行则强行终止之。                proc.Kill();                MessageBox.Show(String.Format("外部程序 {0} 被强行终止!", this.appName), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);            }      }    }    catch (ArgumentException ex)    {      MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);    }}/// <summary>/// 3. 启动外部程序,无限等待其退出/// </summary>private void button3_Click(object sender, EventArgs e){    try    {      Process proc = Process.Start(appName);      if (proc != null)      {            proc.WaitForExit();            MessageBox.Show(String.Format("外部程序 {0} 已经退出!", this.appName), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);      }    }    catch (ArgumentException ex)    {      MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);    }}/// <summary>/// 4. 启动外部程序,通过事件监视其退出/// </summary>private void button4_Click(object sender, EventArgs e){    try    {    //启动外部程序      Process proc = Process.Start(appName);      if (proc != null)      {            //监视进程退出            proc.EnableRaisingEvents = true;            //指定退出事件方法            proc.Exited += new EventHandler(proc_Exited);      }    }    catch (ArgumentException ex)    {      MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);    }}/// <summary>///启动外部程序退出事件/// </summary>void proc_Exited(object sender, EventArgs e){    MessageBox.Show(String.Format("外部程序 {0} 已经退出!", this.appName), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);}
页: [1]
查看完整版本: C#启动外部程序的几种方法以及等待外部程序关闭的方法