一、进程:
需要有用Process类
用法一:Process.Start("calc");
该方法弊端:有许多程序不知道它的运行名字到底是什么,如果写错了,就会出现程序崩溃错误
用法二:
//实例化进程类
Process p = new Process();
//创建进程开启路径对象
ProcessStartInfo psi = new ProcessStartInfo(textBox1.Text);
//进程类开启路径指向
p.StartInfo = psi;
//启动进程,不是立刻开启,什么时候开启时由CPU决定
p.Start();
二、线程:
一个程序至少有一个进程,一个进程至少有一个线程,线程不能孤立执行。进程相当于公司,主线程就是老板,老板只能同时干一件活,其它的或就交给员工,员工就是线程。

程序为什么会假死?因为主线程被占用了

线程去执行一段需要时间的代码,主线程不会被占用,程序就不会出现假死状态了
步骤完善过程:
(1)//创建线程类,并使用委托,指定这个线程要执行的是哪个函数
Thread th = new Thread(aaa); 
//开启线程执行功能,也不是立刻执行
th.Start();
(2)但是这样写线程可以开启多次,最终会造成电脑CPU使用率过高,因此需要限制住,在线程Start方法中添加一个是object类型的参数,而且方法中只能有一个参数;但是程序默认不允许跨线程访问对象,这时需要关闭监控,即在构造函数中,实例化方法下面加上这句话:
Control.CheckForIllegalCrossThreadCalls = false;
(3)当主窗体已经关闭,但是线程如果还未执行完工作内容,那么会默默的继续执行,直到执行完毕后才会将整个进程关闭
程序默认所有的线程都为:前台线程
解决办法:将新开的线程变为后台线程
th.IsBackground = true;

总结:
线程所在的命名空间:System.Threading;
线程类:Thread th = new Thread(方法名);
//没有不要参数的构造函数,常用的为,1个参数,参数类型是委托类型,需要一个方法指向

变为后台线程:
th.IsBackground = true;

线程启动:
th.Start();

如果要执行带参数的方法,那么这个方法的参数必须是object类型,参数传递的位置在Start方法的括号中

允许跨线程访问对象:
在构造函数的构造方法下面加上:
Control.CheckForIllegalCrossThreadCalls = false;

停止线程:
th.Abort();

最新文章

  1. 【NLP】基于自然语言处理角度谈谈CRF(二)
  2. 二十一、【.Net开源框架】EFW框架Web前端开发之目录结构和使用FireBug调试方法
  3. #ifdef 的技巧用法
  4. JVM——类加载器的双亲委派模型
  5. python第三方库推荐 - 通过ntplib在windows上同步时间
  6. shell中exec解析
  7. [转]JSON详解
  8. C# 使用Task实现任务超时,多任务一起执行
  9. PHP秒杀系统 高并发高性能的极致挑战(完整版)
  10. C#学习笔记——MDI窗体(多文档界面)
  11. C++语言实现-邻接表
  12. 每日linux命令学习-xargs命令
  13. Java模拟POST请求发送二进制数据
  14. char和varchar、浮点数和定点数
  15. Android照片墙-多图加载
  16. [转]caffe中solver.prototxt参数说明
  17. OpenCV学习笔记——Mat类型数据存储
  18. class文件直接修改_反编译修改class文件变量
  19. 程序运行bug查看
  20. STL之priority_queue3

热门文章

  1. 无法在Web服务器上启动调试,与Web服务器通信时出现身份验证错误
  2. 转载LINQ TO Entity 在数据库发生更改时更新实体数据模型 .edmx 文件
  3. linux中文设置
  4. Struts1中ActionForward的技巧介绍
  5. Qualcomm Web Site For Android Development
  6. 【C/C++多线程编程之六】pthread相互排斥量
  7. 傲娇Android二三事之操蛋的开发日记(第一回)
  8. swfupload详细参数
  9. html5刮刮卡
  10. 网页媒体播放利器 - JW Player使用心得