zoukankan      html  css  js  c++  java
  • 多线程操作(循环往listbox中添加数据)

    一、先造一个窗体,其中就开始按钮,暂停按钮,以及listbox文本框

    二、当点击开始的时候,数据会无限的往listbox中加,为了防止卡住和提升效率,便造了一个新的线程来执行开始操作

    namespace 线程Again
    {
        //首先要定义一个委托(委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递)
        public delegate void Weituo();//利用这个委托来用方法调用方法
        public partial class Form1 : Form
        {
            //定义好了委托,开始定义一个线程;
            private Thread therad;
            //定义一个bool型的变量来存储是开始还是暂停
            private bool isok=true;
            //定义一个常量
            private long i;
            public Form1()
            {
                InitializeComponent();
                //Control.CheckForIllegalCrossThreadCalls = false;//不要检查安全性(一般不用这句),如果有这句便不需要委托了
            }
    
            private void button1_Click(object sender, EventArgs e)//开始按钮
            {
                button1.Enabled = false;
                //当点击开始的时候,将数据一条条的添加到listbox1中,点暂停便会终止,因为是循环添加数据,一旦点开始变不会停下来,所以这便需要多线程操作,开始按钮有自己单独的线程
    
                //首先将线程实例化出一个
                therad = new Thread(new ThreadStart(Start)); //为button1按钮造一个新的线程,这样点button1的话,就会运行新造的这个线程,而不会影响到窗体的主线程
                therad.IsBackground = true;//确认新造的线程后台运行
                therad.Start();
    
            }
    
    
            //定义一个Start函数,用来循环放数据
            public void Start()
            {
                while (isok)//循环调用委托,改控件属性这个工作交给委托来做
                {
                    //在循环里调用委托函数
                    weituo();
                    
                }
            }
    
            //定义一个委托函数
            public void weituo()
            {
    
                //判断一下新造的(button1)线程来访问listbox1这个控件的listBox1.InvokeRequired属性是true还是false;如果是其他的线程来访问自己的线程,则返回值是ture
                if(listBox1.InvokeRequired)
                {
                    //因为是其他的线程来访问自己的线程,所以返回值是true,既然是其他的线程来访问,为了安全,必须转回到自己的线程,这就用到了委托
                    Weituo x = new Weituo(weituo);//将weituo函数变成新造的线程能够调用的
                    this.Invoke(x);//在拥有button1控件的窗体上执行这个委托
                }
                else
                {   
                    listBox1.Items.Insert(0,i);//一旦返回值是false,便将数据添到listbox1中
                    i++;
                }
    
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                isok = false;
                button1.Enabled = true;
            }
        }
    }

    三、点暂停按钮的时候停止添加数据

  • 相关阅读:
    django模板引擎自定义变量
    Ubuntu系统桌面任务栏和启动器全部消失解决方案
    ubuntu beyond compare到期后续期
    git 分支操作 与 远程新建分支后,本地查看不到
    jmeter 安装
    ubuntu apt-get install 时报错curl : Depends: libcurl4 (= 7.58.0-2ubuntu3.6) but 7.61.0-1ubuntu2 is to be installed或者 vim : Depends: vim-common (= 2:8.0.1453-1ubuntu1) but 2:8.0.1766-1ubuntu1 is to be ins
    【uWSGI】 listen queue of socket (fd: 3) 错误分析
    通过CONN_MAX_AGE优化Django的数据库连接
    Linux(CentOS) 查看当前占用CPU或内存最多的K个进程
    centos django Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING
  • 原文地址:https://www.cnblogs.com/lk-kk/p/4617012.html
Copyright © 2011-2022 走看看