it编程 > 编程语言 > Asp.net

基于C#实现平滑流畅的进度条ProgressBar

55人参与 2026-07-21 Asp.net

引言

一、拖入控件

将工具栏中的progressbar,拖入到界面中。可以到界面中会出现新的控件,当然为了美观也可以拖到底部状态栏(statusstrip)中。

二、设置核心属性

添加控件后可以在属性中看到各种属性(如下图),表中列举的是最核心的属性项目。

属性作用
minimum最小值(默认 0)
maximum最大值(默认 100)
value当前进度值(必须在 min~max 之间)
style样式:blocks(块状)/continuous(连续)/marquee(跑马灯,未知进度)
enabled是否启用/禁用控件(true/false)
visible是否显示/隐藏控件(true/false)

![属性界面](https://i-blog.csdnimg.cn/direct/f6ffb93f180347468547544c41cff7df.png-

三、 选择样式和构建代码

1、无法确认过程时长

//状态枚举
public enum dev_run_status
{
    null,
    idle,
    starting,
    running, 
    stoping,
}

running_step startrunningstep = running_step.ready;//开始运行步骤变量,ready

//初始化加载
private void form_main_load(object sender, eventargs e)
{
	progressbar.style = progressbarstyle.marquee;//指定样式
	progressbar.marqueeanimationspeed = 30; // 指定动画速度
}

private void btncontrolstart_click(object sender, eventargs e)
{	 
		if (startrunningstep == running_step.ready)
		{
			 //运行开始显示进度条
			 progressbar.visbile = true;
		}
		else if (startrunningstep == running_step.stoping)
		{
				//运行结束隐藏进度条
				progressbar.visbile = false;
		}
}

2、可以获取运行时长

/// </summary>
///开始和结束
/// </summary>
private void btncontrolstart_click(object sender, eventargs e)
{	 
	if (startrunningstep == running_step.ready)
	{
		//运行开始显示进度条
		progressbar.visbile = true;
		//启用百分比文字显示
		toolstripstatuslabel_percentage.visible = true;
		// 启动后台进度条任务,时间作为输入参数
		task.run(() => dorealprogress(timer_finish.interval)); 
	}
	else if (startrunningstep == running_step.stoping)
	{
		//运行结束隐藏进度条
		progressbar.visbile = false;
		//关闭百分比显示
		toolstripstatuslabel_percentage.visible = false;
	}
}

/// <summary>
/// 按时间比例自动计算进度
/// </summary>
private async void dorealprogress(int totalms)
{
     //读取开始时间作为分母
    datetime starttime = datetime.now;
    // 每100ms刷新一次,比较平滑流畅
    int refreshinterval = 100; 

    while (isstartrunning)
    {
			// 计算已用时间
			double elapsedms = (datetime.now - starttime).totalmilliseconds;
			
			// 计算百分比(0~100)读取当前时间除以开始时间获取百分比
			int percent = (int)(elapsedms / totalms * 100);
			// 防止超过100
			percent = math.min(percent, 100); 
			
			// 委托更新ui
			this.invoke(new action(() => {
					//设置百分比
					progressbar.value = percent;
					//文本显示百分比
					toolstripstatuslabel_percentage.text = $"{percent}%";
			}));
		    
		     //延时
		    await task.delay(refreshinterval);
    }
}

总结

到此这篇关于基于c#实现平滑流畅的进度条progressbar的文章就介绍到这了,更多相关c#实现进度条progressbar内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

C#代码轻松实现Excel和Markdown互转

07-21

celery是什么?一文带你搞懂任务队列和worker原理(Django环境)

07-21

C#中实现字符串格式化的几种常用方法

07-20

C#中各类集合的基础知识和使用方法详解

07-20

c#使用Await异步操作的方法

07-19

C#代码实现在Excel中编辑或删除批注

07-23

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论