线程的简单使用之进度条

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

这是界面

        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了,再拿出来和大家分享

时间: 2024-10-11 04:08:58

线程的简单使用之进度条的相关文章

Winform之跨线程访问控件(在进度条上显示字体)

此文章对于遇到必须使用线程但是没有办法在线程内操作控件的问题的处理  有很好的解决方案(个人认为的.有更好的方案欢迎交流.) 在做跨线程访问之前我们先了解下我们所做的需要达到的效果: 这个是批量的将xml文件导入sqlite数据库   每个xml有将近3000的节点  每个节点有5个属性,如果我们不用线程那么在数据导入的过程中   程序很可能卡死   而且基本上动不了,用户的体验性就很差. 所以我们对向数据库添加数据的地方使用了线程: Thread thread = new Thread(new

Android中通过实现线程更新ProgressDialog(对话进度条)

作为开发者我们需要经常站在用户角度考虑问题,比如在应用商城下载软件时,当用户点击下载按钮,则会有下载进度提示页面出现,现在我们通过线程休眠的方式模拟下载进度更新的演示,如图(这里为了截图方便设置对话进度条位于屏幕上方): layout界面代码(仅部署一个按钮: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.and

简单实用的进度条加载组件loader.js

本文提供一个简单的方法实现一个流程的进度条加载效果,以便在页面中可以通过它来更好地反馈耗时任务的完成进度.要实现这个功能,首先要考虑怎样实现一个静态的进度条效果,类似下面这样的: 这个倒是比较简单,两个div即可,bootstrap官方就提供有多种主题的进度条组件.如果自己要用,参照下别人的代码,写成自己的风格即可,实际上也非常的好理解: .progress { height: 20px; background-color: #f5f5f5; border-radius: 4px; box-sh

Android简易实战教程--第二十二话《简单的水平进度条》

本打算写一篇自定义水平进度条,但是出于过度和文章的完整性,今天先来一篇简单的进度条. 需求:按钮点击,实现水平进度条加载进度.而且,进度条设置两个进度(到下边的例子里就能知道什么是"第二进度条"了) 配置文件代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/re

简单的jquery进度条插件LineProgressbar.js

参考   http://www.lanrenzhijia.com/jquery/4121.html demo下载 <script src="js/jquery.lineProgressbar.js" type="text/javascript"></script> $(function(){ $('#progressbar1').LineProgressbar({ percentage: 50 }); $('#progressbar2').L

自定义圆形进度条

关于控件呢,我想大家应该都很熟悉了吧,android应用开发MVC架构中,控件担任着至关重要的作用,感觉可以说是基于控件的事件模型人机交互的基础吧.这种特性感觉在wpf开发中体现得更为直接,感兴趣的同学可以去了解一下.而android框架自身就已经给我们提供了很多控件.那么问题来了?为什么有那么多控件可以用,你还要去屑自定义控件呢?是因为大家闲的蛋疼吗?显然不是.个人认为只要有两方面吧,要么是觉得有些原生控件是在是丑得难以忍受(即使是在你已经自定义了他的shape,圆角,selector等一系列

9款极具创意的HTML5/CSS3进度条动画(免积分下载)

尊重原创,原文地址:http://www.cnblogs.com/html5tricks/p/3622918.html 免积分打包下载地址:http://download.csdn.net/detail/yangwei19680827/7352505 今天我们要分享9款极具创意的HTML5/CSS3进度条动画,这些进度条也许可以帮你增强用户交互和提高用户体验,喜欢的朋友就收藏了吧. 1.HTML5/CSS3图片加载进度条 可切换多主题 今天要分享的这款HTML5/CSS3进度条模拟了真实的图片加

闲话进度条

对于程序员来说,进度条(progress bar)大家都很熟悉,进度条有不同的展现形式,包括传统的横向进度条以及各种loading图; 也有不同的实现方法,各种黑科技黑魔法.本文探讨两个问题,第一个为什么要有进度条; 第二个,进度条实现的一点点知识.重点在前者. 为什么要有进度条,前些天在知乎日报上看到一个神吐槽: --为什么男生追女生追着追着就放弃了? --没有进度条提示啊 不禁想到前一段时间在阅读<暗时间>的时候,也看到了这个问题.简单来说,进度条让人心里有个预期(有盼头),让人相信总会完

赵雅智_android多线程下载带进度条

progressBar说明 在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度.一个进度条也可不确定其进度.在不确定模式下,进度条显示循环动画.这种模式常用于应用程序使用任务的长度是未知的. XML重要属性 android:progressBarStyle:默认进度条样式 android:progressBarStyleHorizontal:水平样式 progressBar重要方法 getMax():返回这个进度条的范围的