• .NET 进程和线程


    一、进程:
    需要有用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();

  • 相关阅读:
    浅谈Java设计模式——状态模式(State)
    浅谈Java设计模式——解释器模式(Interpreter)
    浅谈Java设计模式——备忘录模式(Memento)
    struts2 标签
    Struts2 Web资源获取
    链接
    Struts2数据封装机制
    struts学习
    位运算
    归并排序求逆序对
  • 原文地址:https://www.cnblogs.com/TBW-Superhero/p/6185637.html
Copyright © 2020-2023  润新知