zoukankan      html  css  js  c++  java
  • Winform进程、线程

    进程:

    一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况。

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

    1、静态方法Start();

    2、也可以实例化对象,来调用Start()普通方法,但调用普通方法之前需要给

    StartInfo属性设置一个对象,来通知它要打开的是哪个进程(绝对路径

    private void button1_Click(object sender, EventArgs e)
            {
                Process.Start("chrome");
            }

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

    //获取路径
            private void button2_Click(object sender, EventArgs e)
            {
                openFileDialog1.Filter = "应用程序|*.exe";
                DialogResult dr = openFileDialog1.ShowDialog();
                if(dr==DialogResult.OK)
                {
                    textBox1.Text = openFileDialog1.FileName;
                }
            }
            //打开文件
            private void button3_Click(object sender, EventArgs e)
            {
                Process p = new Process();
                ProcessStartInfo psi = new ProcessStartInfo(textBox1.Text);
                p.StartInfo = psi;
                p.Start();
            }
    复制代码
    进程

    线程:

     一个进程就像是一个公司,默认只有一个老板

    老板叫做 主线程 
    主线程一旦让它去执行一段需要时间的代码,那么就会出现
    程序假死,失去控制

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

     解决办法:

    招一个员工帮老板干这个活

    开启线程:  使用Thread类

    线程基本使用:

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

    //准备好了,开始执行,不是立即开始,CPU决定什么时候开始
    th.Start();
    ---------------------------------------------------------------
    需要跨线程访问对象:
    线程需要执行一个方法,而这个方法允许有一个参数,并且这个参数必须是object类型的

    程序默认不允许跨线程访问对象,因为监控开着
    需要关闭监控
    在构造函数的构造方法下面写上:
    Control.CheckForIllegalCrossThreadCalls = false;
    ---------------------------------------------------------------
    程序退出立刻关闭所有线程:
    线程默认开启为前台线程,程序必须将所有的前台线程执行完毕后才会真正退出程序

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

    public partial class Form1 : Form
     2     {
     3         public Form1()
     4         {
     5             InitializeComponent();
     6             //程序默认不允许跨线程访问对象,因为监控开着,需要关闭监控,在构造函数的构造方法下面写上:
     7             Control.CheckForIllegalCrossThreadCalls = false;
     8         }
     9 
    10         private void button1_Click(object sender, EventArgs e)
    11         {
    12             //创建一个线程对象,告诉它要执行的是哪一个方法
    13             Thread th = new Thread(NewMethod);
    14             //设置后台线程
    15             th.IsBackground =true;
    16             //
    17             th.Start(sender);
    18             (sender as Button).Enabled = false;//开始后按钮不可用
    19         }
    20 
    21         private static void NewMethod(object obj)//提取的方法
    22         {
    23             for (int i = 0; i < 5; i++)
    24             {
    25                 Console.WriteLine(i);
    26                 Thread.Sleep(1000);//1秒循环一次
    27             }
    28             (obj as Button).Enabled = true;
    29         }
        }
    线程
  • 相关阅读:
    SqlServer数据库正在还原的解决办法
    v-表单自动收集信息
    v-按键修饰符
    v-for列表排序
    class与style的绑定
    v计算属性的应用
    v子向父组件传值
    v传值和传引用
    v-父组件向子组件传值
    练习鼠标悬停切换图片页面
  • 原文地址:https://www.cnblogs.com/jiuban2391/p/6188359.html
Copyright © 2011-2022 走看看