zoukankan      html  css  js  c++  java
  • Windowsforms 中 进程,线程

    进程:

    进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。

    它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。

    Process 类,用来操作进程。

    命名空间:using System.Diagnostics;

    //通过一个进程,打开指定的文件
    //1、创建进程对象
    Process p = new Process();
    //2.创建一个StartInfo对象,是指定带盘符的路径。
    ProcessStartInfo psi = new ProcessStartInfo(路径);
    //3.进程指定及开始
    p.StartInfo = psi; 
    p.Start(); 
    
    //设置要打开的文件类型
    openFileDialog1.Filter = "应用程序|*.exe";
    //判断是否选择程序文件
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        //取文件路径
          string path = openFileDialog1.FileName;
        //新建一个进程
          Process p = new Process();
        //设置启动信息
          ProcessStartInfo ps = new ProcessStartInfo(path);
          p.StartInfo = ps;
        //启动进程
          p.Start();
    }

    例子:注销

    //string path = Application.StartupPath;//这个path就是你要调用的exe程序的绝对路径
    //获取自身exe或dll的文件名路径
    string s = System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName;
    //创建进程
    Process p = new Process();
    //设置进程启动信息
    ProcessStartInfo ps = new ProcessStartInfo(s);
    p.StartInfo = ps;
    //启动进程
    p.Start();
    //关闭当前程序
    this.Close();

    线程:

    timer控件就是一个线程

    并发

    两个线程的关系其实就是异步关系

    有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。

    区别:进程有自己独立的资源,线程共用资源。

    Thread类, 命名空间:using System.Threading ;

    程序默认只有一个主线程,如果做复杂处理,则会出现假死状态,因为一条线程同时只能做一件事。

    多线程的作用:同时做多件事情,节约时间,后台运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况。

    线程之间是独立的,不能跨线程访问

    取消跨线程访问,需写在Load事件里

    Control.CheckForIllegalCrossThreadCalls = false;

    //造一个线程
    Thread th=new Thread();//括号里需要写线程要操作的方法,不含括号
    //执行线程 th.Start();
    //如果该方法为带参数的,参数必须为object类型的
    private void Test(object n)
    {
      int count = Covert.ToInt32(n)
      for(int i=0;i<count;i++)
      {
        richTextBox1.Text +=i.tostring();
      }
    }
    
    //调用线程
    Thread th =new Thread(Test);
    
    //执行线程,在这里给参数
    th.Start(2000);

    线程分为两种:前台线程——只有所有的前台线程都关闭才能完成程序关闭。

    后台线程——只要所有的前台线程都结束,后台线程则会自动结束。

    //设置th线程为后台线程
    th.IsBackground=true;

      FromClosing事件中:

    //判断新线程是否为null,如果为null,那就自动关闭了
    if(th != null)
    {
        //立即结束线程,但是结束后就不能再被重新Start了
        th.Abort(); 
    }
  • 相关阅读:
    PhpExcel笔记,phpExcel中文帮助手册
    mysql “group by ”与"order by"的研究--分类中最新的内容
    mysql中,主键与普通索引
    mysql性能优化-慢查询分析、优化索引和配置
    OpenSSL
    HAProxy
    Lighttpd
    Linux find/grep命令
    keepalived
    iptables
  • 原文地址:https://www.cnblogs.com/dreamer666/p/5839602.html
Copyright © 2011-2022 走看看