C#实现一个进度条弹窗,进度到达100%后,自动关闭窗口

//实现进度条弹窗:
//手动新建一个.cs设计窗口,界面内加入一个进度条,一个停止按钮,一个百分比标签控件
//代码文件如下:
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;
using System.Windows.Forms;
using DevExpress.Utils.WXPaint;
using PCSTools;

namespace PCSTools
{
    public partial class ProgressBarForm : Form
    {
        private System.Windows.Forms.Timer timer;        
        public ProgressBarForm()
        {
            InitializeComponent();
            this.progressBar.Maximum = 100;
            this.progressBar.Value = 0;

            timer = new System.Windows.Forms.Timer();          
            timer.Interval = 100; // 定时器间隔时间,单位为毫秒 (延迟检查进度条有没有到达100%的定时时长,可以等待进度条显示完全)          
            timer.Tick += Timer_Tick; 
            timer.Start(); //启动定时器检测进度到达100%后,自动怕关闭窗口          
        }      
        private async void Timer_Tick(object sender, EventArgs e)
        {           
            // 继续执行其他操作
            if (progressBar.Value >= progressBar.Maximum)
            {
                await Task.Delay(10);
                //确保进度条可以更新到100%,再关闭。
                //注:如果不加中这条异步延时语句,如果要进度条更新到100%时自动关闭窗口,
                //会因为先判断到进度更新值到达100%,但是进度条界面还没更新完毕,窗口就被提前关闭了。
                //延时时间不重要,只是这个异步操作可以解决界面更新慢的问题。

                Thread.Sleep(2000);//延时显示2s后再关闭窗口
                this.Close();
                timer.Stop();
                timer.Dispose();                   
            }                                       

        }

        // 方法用于更新进度条的值
        public void UpdateProgress(int progress)
        {
            if (progress <= progressBar.Maximum)
            {
                progressBar.Value = progress;
                label_percent.Text = progress + "%";               
            }                   
        }  
    }
}

//调用的主窗口代码:

public ProgressBarForm progressForm;//创建进度窗口变量

//弹出进度条窗口
progressForm = new ProgressBarForm();
progressForm.StartPosition = FormStartPosition.CenterScreen;//设置进度条弹窗在屏幕居中显示
progressForm.Show(); // 显示进度窗口

//其他函数内部更新进度条
for (int l = 0; l < 700; l++)
{
    if((i*700+l)%112 == 0)
    {
        Pro_percent++;
        if (progressForm != null && !progressForm.IsDisposed)
        {
            // 进度条窗口可以被调用
            progressForm.UpdateProgress(Pro_percent);
        }                         
        if (100 == Pro_percent)
        {                                
            Pro_percent = 0;                             
        }
    }                     
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值