• winform进程、线程


    随笔- 86 文章- 0 评论- 0

    winform进程、线程

    进程:

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

    进程所使用的类:Process

    所需命名空间:System.Diagnostics;

    可以通过进行来开启计算机上现有的程序:

    1、使用静态方法Start();但必须要知道进程名

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

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

    例:点击按钮选择文件路径,并显示出来,点击第二个按钮可打开此程序

    复制代码
    private void button1_Click(object sender, EventArgs e)
            {
                Process p = new Process();
                ProcessStartInfo psi = new ProcessStartInfo(textBox1.Text.Trim());
    
                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;
                }
    
            }
    复制代码

    线程:

    线程是程序中一个单一的顺序控制流程。一个程序只有一个主线程,winform中主线程就是控制窗体本身操作的,

    如果要让它去执行一个需要一定时间才能完成的代码,那此时窗体会卡住,出现假死状态,为了避免这种情况,就需要用到多线程。

    创建线程对象:Thread

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

    程序默认不允许跨线程访问对象,如果仍想访问,需要在构造函数中写上Control.CheckForIllegalCrossThreadCalls = false;

    线程默认开启为前台线程,程序必须将所有的前台线程执行完毕后才会真正退出程序,所以一般都会将线程改为后台线程th.IsBackground = true;

    注:想让线程去执行的功能必须封装成方法

    例:

    复制代码
    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;
    
            }
    复制代码
  • 相关阅读:
    字符串中的不可见字符应该如何清除?
    字符/字段数据的合并
    分割字符串的应用
    几种分割字符串实现方法的比较
    linux的一些文件基本命令
    centos7安装es6.4.0
    Sql 语句中 IN 和 EXISTS 的区别及应用
    Springboot通过redisTemplate实现发布订阅
    代理模式
    单例模式的多种实现方法
  • 原文地址:https://www.cnblogs.com/zhulijun/p/6809075.html
Copyright © 2020-2023  润新知