项目结构

代码结构

运行截图
点击开始按钮

执行过程中

执行完成

代码实现
首先声明一个委托变量
//添加一个委托
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
本文介绍了一个使用C#实现的进度条更新机制。通过委托SetTextPos来更新UI线程中的进度条显示,确保了GUI响应性。此外,还展示了如何初始化数据列表并处理这些数据,最终实现了异步更新进度条的效果。

356

被折叠的 条评论
为什么被折叠?



