zoukankan      html  css  js  c++  java
  • WinForm进程 线程

    进程主要调用另一程序,线程 分配工作。

    一、进程:

    进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。
    Process 类,用来操作进程。 命名空间:using System.Diagnostics;

    一个程序只有一个进程

    Process.Start("calc"); //计算器
    Process.Start("mspaint"); //画图
    Process.Start("iexplore" , "http://www.baidu.com");//打开浏览器并指定地址

    1、通过一个进程,打开指定的文件

    1.创建进程对象
    Process p = new Process();
    2.创建一个StartInfo对象,是指定带盘符的路径。
    ProcessStartInfo psi = new ProcessStartInfo(@"C:user.....);
    3.进程指定及开始
    p.StartInfo = psi; //指定路径
    p.Start(); //开始进程


    通过文件选择框让用户自己选择所需要打开的程序并打开:

     private void button1_Click(object sender, EventArgs e)
            {
                //设置选择文件的类型
                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();
                    //关闭进程
                    p.Kill();
                }
            }

    列子:注销

    string path=    System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName;  获取自身文件的路径 
     //注销
            private void button2_Click(object sender, EventArgs e)
            {
                //打开该程序
                //取该程序文件的路径
               // string path = Application.StartupPath;
            string path=    System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName;
                //造一个进程
            Process p = new Process();
                //造一个进程的启动信息
            ProcessStartInfo ps = new ProcessStartInfo(path);
                //设置进程启动信息
            p.StartInfo = ps;
                //启动进程
            p.Start();
    
                //关闭程序
                this.Close();
            }


    需要调用别的程序,可以做一个进程

     二、线程

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

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

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

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

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

    同步:就只有一个线程  异步:多个线程(主要做这个) 

     程序出现假死就是 一个线程多用了

    鼠标移动窗体
      //鼠标移动窗体   在picturebox里点击移动窗体         没有窗体边框也可移动     location(属性)
            private int x;
            private int y;
    
            private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
            {
                //鼠标按下执行的东西
                x=e.X;
                y = e.Y;
    
            }
    
            private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
            {
                //鼠标移动事件
                if (e.Button == System.Windows.Forms.MouseButtons.Left)//判断鼠标按下的是左键
                {
                    this.Left = this.Left + (e.X - x);
                    this.Top = this.Top + (e.Y - y);
                }
            }

    创建线程:

    开启新的线程执行哪个函数

    创建线程:

    开启新的线程执行哪个函数
      

      Thread th = new Thread( 里面写线程要操作的方法,方法名不含括号 );

    标记这个线程准备就绪了,可以随时执行,CPU决定执行时间
      

      th.Start();

    控件由主线程创建,新线程想要访问主线程资源,程序默认是不允许跨线程访问的。

    取消跨线程访问限制
    在界面Load事件里

      Control.CheckForIllegalCrossThreadCalls = false;

            private void button3_Click(object sender, EventArgs e)
            {
                //造一个线程
                Thread th = new Thread(test);
                //取消跨线程访问限制   在load里写

    //执行线程 th.Start(); } //做一个方法 假死状态 private void test() { for (int i = 0; i < 3000; i++) { richTextBox1.Text += i.ToString(); } }

    线程分为两种:

    前台线程  -  只有所有的前台线程都关闭才能完成程序关闭。

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

    两者的区别:应用程序必须运行完所有的前台线程才可以退出;

          而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。

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

    FormClosing 事件中:

      //判断新线程是否为null,如果为null,那就自动关闭了
      if(th != null)
      {
        //立即结束线程,但是结束后就不能再被重新Start了
        th.Abort(); 
      }

     执行带参数的函数:

    如果该方法是带参数的,并且是放在线程里面执行的,要求该方法的参数必须是object类型的

    Thread th = new Thread(Test);   //参数名不需要带括号
      th . IsBackground = true;
      th.Start(2000); //在这里传入Test函数所需要的参数

     这样函数中就需要强转:
      private void Test (object n)
      {

             int count=Convert.ToIn32(n);

         for (int i = 0; i < 3000; i++)
                {
                    richTextBox1.Text += i.ToString();
                }


        
      }

  • 相关阅读:
    Balanced Binary Tree
    Convert Sorted List to Binary Search Tree
    Convert Sorted Array to Binary Search Tree
    Binary Tree Zigzag Level Order Traversal
    Validate Binary Search Tree
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Maximum Depth of Binary Tree
    如何把U盘的两个盘或者多个盘合成一个
    bugku 想蹭网先解开密码
  • 原文地址:https://www.cnblogs.com/yp11/p/5862166.html
Copyright © 2011-2022 走看看