zoukankan      html  css  js  c++  java
  • 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();

  • 相关阅读:
    航班查询http://www.variflight.com/
    打印串口日志
    驱动天使 360驱动大师好用2020
    mysqldMY-010457] [Server] --initialize specified but the data directory has files in it. Aborting. 2020-12
    拖拽刻录
    traceroute排查网络故障 www.qq.com排查网络故障网络不通 先ping自己
    tigervnc报错
    java axis调用带有soap头(soapheader)的.net webservice
    java 调用WebService【转】
    List<String>转换为实体类的属性【转】
  • 原文地址:https://www.cnblogs.com/hcx999/p/5913349.html
Copyright © 2011-2022 走看看