《WinForm 系列》- 进度条ProgessBar

本文介绍了一个使用C#实现的进度条更新机制。通过委托SetTextPos来更新UI线程中的进度条显示,确保了GUI响应性。此外,还展示了如何初始化数据列表并处理这些数据,最终实现了异步更新进度条的效果。

项目结构

113743_eAiT_2330610.png

代码结构

112558_S26O_2330610.png

运行截图

点击开始按钮

112937_JCvM_2330610.png

执行过程中

112959_oAvc_2330610.png

执行完成

113036_bcLp_2330610.png

代码实现

首先声明一个委托变量

 //添加一个委托
 private delegate void SetPos(int total, int finish);

定义一个委托类型

#region 进度条 - SetTextPos(int total, int finish)
private void SetTextPos(int total, int finish)
{
    if (this.InvokeRequired)
    {
        SetPos setpos = new SetPos(SetTextPos);
        this.Invoke(setpos, new object[] { total, finish });
    }
    else
    {
        this.lbNum.Text = string.Format("进度:{0}/{1} ", finish, total);
        this.pgb.Value = Convert.ToInt32(finish * 100 / total);

        if (this.pgb.Value == 100)
        {
            this.lbNum.Visible = true;
            this.pgb.Visible = true;
            this.btnStart.Enabled = true;
        }
        else
        {
            this.lbNum.Visible = true;
            this.pgb.Visible = true;
            this.btnStart.Enabled = false;
        }
    }
}
#endregion

初始化数据(实际项目中,可能是从数据库查询出来的)

 #region 初始化数据 - InitData()
 private List<int> InitData()
 {
     var list = new List<int>();
     for (int i = 0; i < 10000; i++)
     {
         list.Add(0);
     }
     return list;
 }
 #endregion

处理数据(实际项目中,就是你的具体业务操作)

 #region 处理数据 - DealData()
 private void DealData()
 {
     var list = InitData();
     for (int i = 0; i < list.Count; i++)
     {
         //处理数据
         SetPos sp = new SetPos(SetTextPos);
         sp(list.Count, i + 1);
     }
     MessageBox.Show("执行完成");
 }
 #endregion

执行开始方法

# region 开始方法 - btnStart_Click(object sender, EventArgs e)
private void btnStart_Click(object sender, EventArgs e)
{
    if (MessageBox.Show("点击按钮开始执行进度条", "请确认信息", MessageBoxButtons.YesNo) == DialogResult.Yes)
    {
        Thread thread = new Thread(() =>
        {
            DealData();
        });
        thread.Start();
    }
}
#endregion

 

转载于:https://my.oschina.net/kimisme/blog/1606038

刻度样式进度条的载入控件, 除了刻度进度条外,其他任何部分都可自定义。项目地址:https://github.com/glomadrian/dashed-circular-progress 效果图:如何使用:<com.github.glomadrian.dashedcircularprogress.DashedCircularProgress         android:layout_width="300dp"         android:layout_height="300dp">         //这里你可以添加任意View,他将显示在控件的中心位置     </com.github.glomadrian.dashedcircularprogress.DashedCircularProgress>比如:<com.github.glomadrian.dashedcircularprogress.DashedCircularProgress         android:id="@ id/progress"                 android:layout_centerInParent="true"         android:layout_width="300dp"         android:layout_height="300dp"         custom:min="0"         custom:max="100"         custom:duration="3500"         custom:progress_icon="@drawable/android">         <TextView android:id="@ id/text"                 android:textSize="25sp"                 android:layout_width="wrap_content"                 android:layout_height="wrap_content"                  android:text=""/>     </com.github.glomadrian.dashedcircularprogress.DashedCircularProgress>添加了一个用于显示进度的Textview。 你也可以添加ImageView等任何View。java代码:progress = (DashedCircularProgress)this.findViewById(R.id.progress); text = (TextView)this.findViewById(R.id.text); progress.setOnValueChangeListener( new DashedCircularProgress.OnValueChangeListener() {//监听进度值的变化,     @Override     public void onValueChange(float value) {         text.setText((int) value   "%");显示进度值     } }); progress.setValue(50);//设置当前的进度值为50。注意progress.setValue()设置的并不是进度的百分比。而要知道进度完成的百分比,你还需要设置progress.setMax(),progress.setMin() 即进度的最大值、最小值。属性说明:external_color  外圈圆环的颜色base_color    内圈(显示进度的)圆环颜色progress_color  内圈已完成部分的圆环颜色max   进度最大值min   进度最小值progress_icon  设置顶端的图标duration  进度改变时,需要多长时间的动画达到这个值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值