有能有时候我们启动了一个进程,必须等到此进程执行完毕,或是,一段时间,

关闭进程后再继续往下走。

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

转载于:https://www.cnblogs.com/qqhfeng/p/4769524.html

[C#] 等待启动的进程执行完毕相关推荐

  1. Java多线程、主线程等待所有子线程执行完毕、共享资源

    1.Java创建与启动线程 Java提供两种方式创建和启动线程:1.直接Thread类,2.实现Runable接口. 1.1  继承Thread类 public class myThread exte ...

  2. java等待所有子线程执行完毕再执行

    前言:在工作项目中,有很多耗时处理都需要开多线程运行.简单的接口可以直接异步处理解决,但是对于一些业务逻辑复杂需要同步返回的这时候就需要用到以下三个多线程等待方法了. 1.  thread.join( ...

  3. go 怎么等待所有的协程完成_优雅地等待子协程执行完毕

    goroutine模拟了线程级别的返场的能力,但它的执行需要主协程给机会.一般的作法用sleep,chan阻塞,看起来让人不爽,本文介绍sync.WaitGroup 类型结合 defer 的特性,给出 ...

  4. java主线程等待所有子线程执行完毕再执行

    java主线程等待所有子线程执行完毕在执行,这个需求其实我们在工作中经常会用到,比如用户下单一个产品,后台会做一系列的处理,为了提高效率,每个处理都可以用一个线程来执行,所有处理完成了之后才会返回给用 ...

  5. 【前端】等待异步任务js执行完毕再执行

    [前端]等待异步任务js执行完毕再执行 //页面加载完毕后执行 $(function(){console.info('---- 我是js代码 Start ----');//异步方法集合let prom ...

  6. Java主线程等待所有子线程执行完毕再执行解决办法(转)

    方法一: Thread.join()方法,亲测可行,thread.join()方法 [java] view plain copy Vector<Thread> ts = new Vecto ...

  7. c#等待所有子线程执行完毕方法

    当我们在使用线程中,你会发现主线结束后子线程的结果才显示出来.现在我要等待所以子线程结束,然后在显示结果,怎么做呢? 方法如下: 1.使用 ManualResetEvent,代码如下:  using  ...

  8. java 等待线程/线程池执行完毕

    1.单线程开始并执行完毕 当线程开始后,需要用到join的方法 不废话直接贴代码 public static void main(String args[]) {long begin = System ...

  9. 阻塞主线程,等待异步子线程执行完毕再退出主线程,有几种写法?

    这里实际是考察线程间的通信,正常情况下,主线程里启动异步线程执行某个方法,理论上主线程和这个异步线程是并行执行,互不干扰,但是现在要求异步线程执行完毕方法之后,才能继续执行主线程,实际是如何阻塞主线程 ...

最新文章

  1. python dump函数_python中实现php的var_dump函数功能
  2. 上手机器学习,从搞懂这十大经典算法开始
  3. spring cloud入门_SpringBoot 入门系列0SpringBoot与SpringCloud技术选型
  4. 点击右侧导航栏,实现iframe嵌入子页面中div,滑动到最上面
  5. 前端页面预览word_jquery.media.js实现前端页面预览
  6. 哪个app最费电_关于石墨烯养生地暖,业主最关心的几大问题,答案附上!
  7. java 工具类sort_Java 通用排序工具类ListSortUtils
  8. NLP 《马尔科夫链》
  9. C#基础知识(收藏)
  10. 基于Python的IMDB电影评论文本分类
  11. cesium three性能比较_初探希捷Exos银河18 TB盘,容量和性能双双提升
  12. oracle wallet java_使用Oracle客户端wallet实现匿名登录
  13. 2018-2-13-win10-UWP--蜘蛛网效果
  14. 学习人工智能宝藏网站(Papers with Code)
  15. 【Java的反射机制】
  16. jQuery File Upload
  17. 服务器性能计时器如何关闭,如何在游戏关闭时继续倒数计时器?
  18. 喝碗孟婆汤,走回奈何桥:QQ伤感日志
  19. 【英语词组】恋恋不忘Day 3-3
  20. 【VSCode】安装VSCode都需要配置什么?

热门文章

  1. Linux文件与目录的rwx权限
  2. 徒手撸一个简单的 IOC
  3. 正则表达式真的很骚,可惜你不会写!
  4. Spring StateMachine,教你快速实现一个状态机
  5. 优秀程序员写代码一定会用的 11 条经验
  6. 分布式系统中处理参数配置的 4 种方案
  7. 38.C++修饰构造函数的explicit关键字
  8. 用力和应变片计算弹性模量_一种沿深度非均匀分布的残余应力测试计算方法与流程...
  9. access 战地1不加入ea_战地1正式加入origin access
  10. python和表格关系_数据表之多表关联