• 进程、线程


    进程: 一个程序就是一个进程,但是也有一个程序需要多个进程来支持的情况

    进程要使用的类是:Process 它在命名空间:System.Diagnostics;

    静态方法Start(); 也可以实例化对象,来调用Start()普通方法,但调用普通方法之前需要给 StartInfo属性设置一个对象,来通知它要打开的是哪个进程

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace 进程
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Process p = new Process();
                ProcessStartInfo psi=new ProcessStartInfo(textBox1.Text);
                p.StartInfo = psi;
    
                p.Start();
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                openFileDialog1.Filter = "应用程序|*.exe";
                DialogResult dr = openFileDialog1.ShowDialog();
                if (dr == DialogResult.OK)
                {
                    textBox1.Text = openFileDialog1.FileName;
                }
            }
        }
    }

    线程: 一个进程就像是一个公司,默认只有一个老板 老板叫做  主线程  主线程一旦让它去执行一段需要时间的代码,那么就会出现 程序假死,失去控制

    原因是:线程同一时间只能做一件事,而主线程是操作窗体控制的,一旦被占用,那么窗体就没人控制了。

    解决办法: 招一个员工帮老板干这个活

    开启线程:

     线程基本使用:  //创建一个线程对象,告诉它要执行的是哪一个方法  Thread th = new Thread(aaa);

     //准备好了,开始执行,不是立即开始,CPU决定什么时候开始  th.Start();  

    ---------------------------------------------------------------

     需要跨线程访问对象:  线程需要执行一个方法,而这个方法允许有一个参数,并且这个参数必须是object类型的    

    程序默认不允许跨线程访问对象,因为监控开着  需要关闭监控  在构造函数的构造方法下面写上:  Control.CheckForIllegalCrossThreadCalls = false;  

    ---------------------------------------------------------------  

    程序退出立刻关闭所有线程:  线程默认开启为前台线程,程序必须将所有的前台线程执行完毕后才会真正退出程序  

     解决办法:将线程变为后台线程  //设置后台线程  th.IsBackground = true;

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
    
                Control.CheckForIllegalCrossThreadCalls = false;
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //创建一个线程对象,告诉它要执行的是哪一个方法
                Thread th = new Thread(aaa);
    
                //设置后台线程
                th.IsBackground = true;
    
                //准备好了,开始执行,不是立即开始,CPU决定什么时候开始
                th.Start(sender);
                (sender as Button).Enabled = false;
    
    
            }
           private static void aaa(object bbb)
            {
                for (int i = 0; i < 10; i++)
                {
                    Console.WriteLine(i);
                    Thread.Sleep(1000);
                }
                (bbb as Button).Enabled = true;
    
            }
    
        }
    }

    进程:清除所有进程

    Process[] pr= Process.GetProcesses();
                foreach (Process p in pr)
                {
                    p.Kill();
                }
  • 相关阅读:
    剑指Offer 30 包含min函数的栈
    剑指Offer 29 顺时针打印矩阵
    剑指Offer 27 二叉树的镜像
    13张动图助你彻底看懂马尔科夫链、PCA和条件概率!
    一位ML工程师构建深度神经网络的实用技巧
    IBM沃森会成为第一个被抛弃的AI技术吗?
    中国最强AI超级服务器问世,每秒提供AI计算2000万亿次
    SAP WM 有无保存WM Level历史库存的Table?
    SAP MM 按采购订单查询付款信息的报表?
    机器学习项目失败的9个原因
  • 原文地址:https://www.cnblogs.com/wy1992/p/6179261.html
Copyright © 2020-2023  润新知