WinForm 进程与线程

进程:

最基础的打开进程的方法: Process.Start("calc");

弊端:必须输入打开进程的名字,如果打开进程的名字错误,程序崩溃

完善的打开进程的方法:

  //实例化进程类
  Process p = new Process();
  //创建进程开启路径对象
  ProcessStartInfo psi = new ProcessStartInfo(textBox1.Text);
  //进程类开启路径指向
  p.StartInfo = psi;
  //启动进程(实际不是立即开启,由CPU运行的容量决定)
  p.Start();


线程:
  进程理解成为一个公司,公司默认有一个老板
  老板就理解成为主线程

  线程理解成为员工,公司里有好多事,不能都让老板来干,干不过来
  员工去做一件事,不会耽误老板的正常工作

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

  线程去执行一段需要时间的代码,主线程不会被占用,程序就不会出现假死状态了

  //创建线程类,并使用委托,指定这个线程要执行的是哪个函数
  Thread th = new Thread(aaa);
  //开启线程执行功能,也不是立刻执行
  th.Start();

问题一:线程可以开启很多个,如果用户可以无限点击按钮,那么就会占用更多的内存,会造成电脑CPU使用率过高


  用线程执行方法,只能传一个参数,并且此参数必须是object类型
  程序默认不允许跨线程访问对象

  在构造函数中,实例化方法:
  Control.CheckForIllegalCrossThreadCalls = false;

问题二:默认主窗体已经关闭,但是线程如果还未执行完工作内容,那么会默默的继续执行,直到执行完毕后才会将整个进程关闭

  原因:程序默认所有的线程都为:前台线程

  将新开的线程变为后台线程:
  th.IsBackground = true;

线程总结:
  线程所在的命名空间:System.Threading;


  线程类:Thread th = new Thread(方法名);
  //没有不要参数的构造函数,常用的为,1个参数,参数类型是委托类型,需要一个方法指向

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


  线程启动:
  th.Start();
  如果要执行带参数的方法,那么这个方法的参数必须是object类型,参数传递的位置在Start方法的括号中


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

  停止线程:
  th.Abort();

原文地址:https://www.cnblogs.com/hcx999/p/5913349.html