标签:
有能有时候我们启动了一个进程,必须等到此进程执行完毕,或是,一段时间,
关闭进程后再继续往下走。
Example
sample1
等待应用程序执行完毕
//等待应用程序执行完毕
private void btnProcessIndefinitely_Click(object sender, EventArgs e) {
//配置文件案路径
string target = System.IO.Path.Combine(Application.StartupPath,@"Test.txt");
//取得完整绝对路径
target = System.IO.Path.GetFullPath(target);
//启动进程
Process p = Process.Start(target);
//让 Process 组件等候相关的进程进入闲置状态。
p.WaitForInputIdle();
//设定要等待相关的进程结束的时间,并且阻止目前的线程执行,直到等候时间耗尽或者进程已经结束为止。
p.WaitForExit();
if (p != null) {
p.Close();
p.Dispose();
p = null;
}
this.Close();
}
sample2
等待应用程序(7秒)
//等待应用程序(7秒)
private void btnWaitProcessfor7_Click(object sender, EventArgs e) {
//配置文件案路径
string target = System.IO.Path.Combine(Application.StartupPath, @"Test.txt");
//取得完整绝对路径
target = System.IO.Path.GetFullPath(target);
//启动进程
Process p = Process.Start(target);
//让 Process 组件等候相关的进程进入闲置状态。
p.WaitForInputIdle();
//设定要等待相关的进程结束的时间,这边设定 7 秒。
p.WaitForExit(7000);
//若应用程序在指定时间内关闭,则 value.HasExited 为 true 。
//若是等到指定时间到了都还没有关闭程序,此时 value.HasExited 为 false,则进入判断式
if (!p.HasExited) {
//测试进程是否还有响应
if (p.Responding) {
//关闭用户接口的进程
p.CloseMainWindow();
} else {
//立即停止相关进程。意即,进程没回应,强制关闭
p.Kill();
}
}
if (p != null) {
p.Close();
p.Dispose();
p = null;
}
this.Close();
}
sample3
使用多线程等候应用程序(7秒)
以上两种方法,在等待进程完成时,窗体画面会 lock 住,无法重绘,这边提供一个改善的方法,
若有其他方法,望前辈指导。
//使用多线程等候应用程序(7秒)
private void btnMultiThreadWaitProcess_Click(object sender, EventArgs e) {
//建立线程对象
Thread thread = new Thread(new ThreadStart(StartProcess));
//启动线程
thread.Start();
//等待线程处理完毕
while (thread.ThreadState == System.Threading.ThreadState.Running ||
thread.ThreadState == System.Threading.ThreadState.WaitSleepJoin) {
Application.DoEvents();
}
this.Close();
}
private void StartProcess() {
//配置文件案路径
string target = System.IO.Path.Combine(Application.StartupPath, @"Test.txt");
//取得完整绝对路径
target = System.IO.Path.GetFullPath(target);
//启动进程
Process p = Process.Start(target);
//让 Process 组件等候相关的进程进入闲置状态。
p.WaitForInputIdle();
//设定要等待相关的进程结束的时间,这边设定 7 秒。
p.WaitForExit(7000);
//若应用程序在指定时间内关闭,则 value.HasExited 为 true 。
//若是等到指定时间到了都还没有关闭程序,此时 value.HasExited 为 false,则进入判断式
if (!p.HasExited) {
//测试进程是否还有响应
if (p.Responding) {
//关闭用户接口的进程
p.CloseMainWindow();
} else {
//立即停止相关进程。意即,进程没回应,强制关闭
p.Kill();
}
}
if (p != null) {
p.Close();
p.Dispose();
p = null;
}
}
源代码
TestProcessWaitting.rar
标签:
原文地址:http://www.cnblogs.com/qqhfeng/p/4769524.html