C# 实现外部程序启动与控制
需积分: 9 186 浏览量
更新于2024-09-11
收藏 343KB PDF 举报
"这篇资源主要介绍了C#编程中如何启动并控制外部程序的执行,包括不等待、等待、无限等待以及通过事件监听程序退出的四种方法。"
在C#编程中,启动和管理外部程序是常见的操作,尤其在需要与其他应用程序进行交互或自动化任务时。以下是对四种不同启动外部程序方法的详细解释:
1. 启动外部程序,不等待其退出:
在这段代码中,`Process.Start(appName)` 方法用于启动指定的外部程序(如 `calc.exe`)。此方法立即返回,不会阻塞调用线程,因此主程序会继续执行下一行代码,不会等待外部程序结束。`MessageBox.Show` 提示用户程序已启动。
```csharp
private void button1_Click(object sender, EventArgs e)
{
Process.Start(appName);
MessageBox.Show(String.Format("外部程序{0}启动完成!", this.appName), this.Text,
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
```
2. 启动外部程序,等待其退出:
使用 `Process.Start` 启动程序后,可以调用 `WaitForExit` 方法来使当前线程等待直到进程结束。在这里,我们设置了3秒钟的超时时间(`3000` 毫秒),如果外部程序在3秒内未退出,`WaitForExit` 将返回,然后检查 `HasExited` 属性来判断程序是否已经结束。如果程序未结束,则会调用 `Kill` 方法强制结束。
```csharp
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);
}
}
```
3. 启动外部程序,无限等待其退出:
如果希望程序完全等待外部程序结束再继续执行,可以省略 `WaitForExit` 的超时参数,使其无限等待,直到外部程序结束。这样可以确保程序执行顺序,但可能会阻塞当前线程。
```csharp
private void button3_Click(object sender, EventArgs e)
{
Process proc = Process.Start(appName);
proc.WaitForExit(); // 无限等待直到进程结束
MessageBox.Show(String.Format("外部程序{0}已经退出!", this.appName), this.Text,
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
```
4. 启动外部程序,通过事件监视其退出:
可以订阅 `Process.Exited` 事件来监视外部程序的退出,当外部程序结束时,事件处理器将被调用。这种方法更适用于需要在程序退出时执行特定操作的情况。
```csharp
private Process proc;
private void button4_Click(object sender, EventArgs e)
{
proc = Process.Start(appName);
proc.Exited += new EventHandler(proc_Exited);
}
private void proc_Exited(object sender, EventArgs e)
{
MessageBox.Show(String.Format("外部程序{0}已经退出!", this.appName), this.Text,
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
```
以上四种方法可以根据实际需求选择使用,例如,如果你只是简单地启动一个程序并希望立即继续执行其他代码,可以选择不等待退出的方法;如果需要确保外部程序执行完毕后再进行下一步操作,则应等待其退出。而在某些情况下,监听程序退出事件可以提供更灵活的控制。
2009-12-27 上传
2022-09-21 上传
2021-01-20 上传
2020-09-04 上传
2020-12-25 上传
2016-08-13 上传
2023-06-01 上传
why10260922
- 粉丝: 6
- 资源: 3
最新资源
- 探索AVL树算法:以Faculdade Senac Porto Alegre实践为例
- 小学语文教学新工具:创新黑板设计解析
- Minecraft服务器管理新插件ServerForms发布
- MATLAB基因网络模型代码实现及开源分享
- 全方位技术项目源码合集:***报名系统
- Phalcon框架实战案例分析
- MATLAB与Python结合实现短期电力负荷预测的DAT300项目解析
- 市场营销教学专用查询装置设计方案
- 随身WiFi高通210 MS8909设备的Root引导文件破解攻略
- 实现服务器端级联:modella与leveldb适配器的应用
- Oracle Linux安装必备依赖包清单与步骤
- Shyer项目:寻找喜欢的聊天伙伴
- MEAN堆栈入门项目: postings-app
- 在线WPS办公功能全接触及应用示例
- 新型带储订盒订书机设计文档
- VB多媒体教学演示系统源代码及技术项目资源大全