码迷,mamicode.com
首页 > 编程语言 > 详细

线程的简单使用之进度条

时间:2016-08-12 11:44:03      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

我们可能在程序里经常会使用到进度条这样的东西,本人是个菜鸟,第一次写这种东西的时候思路是这样的,不多说上代码

技术分享

这是界面

        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i<100;i++ )
            {
                Thread.Sleep(1000);//此处停一秒
                this.progressBar1.Value = i;
                this.label1.Text = i.ToString();
            }
        }

不出意外的话应该就卡死了,这就是所谓的卡UI,然后本人就在想是不是因为刷新(不知道怎么表达,但好像就是这种感觉),于是本菜鸟给Form1加了一个timer

并把代码改成这样子:

   private void button1_Click(object sender, EventArgs e)
        {
            timer1.Interval = 100;
            timer1.Start();
            timer1.Tick += timer1_Tick;
        }
        int value = 0;
        void timer1_Tick(object sender, EventArgs e)
        {

            if(value==101)
            {
                timer1.Stop();
                MessageBox.Show("完成");
                return;
            }
            this.progressBar1.Value = value;
            this.label1.Text = value.ToString()+"%";
            value++;
        }

但是总感觉怪怪的,然后上网查了下,知道了线程

然后一般正确的使用姿势

        delegate void MyDel(int v);
        private void button1_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(new ThreadStart(Test));//实例化一个线程
            thread.Start();//开启线程
        }

        private void Test()
        {
            MyDel mydel = ChangeUI;
            for (int i = 0; i < 100; i++)
            {
                Thread.Sleep(100);//此处阻塞100毫秒
                this.Invoke(mydel,i);
            }

        }

        private void ChangeUI(int value)
        {
            this.progressBar1.Value = value;
            this.label1.Text = value + "%";
        }

不知Invoke用法的请移步我另一个随笔:    http://www.cnblogs.com/shitong/p/5763775.html

这是没有参数的线程,线程还有一个可以传参数的如下:

        private void button1_Click(object sender, EventArgs e)
        {


            ParameterizedThreadStart pts = new ParameterizedThreadStart(Test1);
            ThreadStart ts = new ThreadStart(Test);//线程调用的方法
            Thread thread = new Thread(ts);//实例化一个线程
            Thread thread2 = new Thread(pts);
            thread.Start();//开启线程
            thread2.Start("object类型的参数");
        }
        public void Test1(object obj)
        {
            string s = (string)obj;
        }

好啦,由于本菜鸟很菜,就写到这了,以后等本菜鸟玩的比较6了,再拿出来和大家分享

 

线程的简单使用之进度条

标签:

原文地址:http://www.cnblogs.com/shitong/p/5763970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!