最近做一个类似转移数据的程序,需要用到进度条,要求大概是这样的。
统计一段数据总量,显示在界面,共有10多段数据。开始转移数据,转移时进度条与转移的进度要一致,每转移成功一段数据,进度条就到尽头一次,直到10多段数据全部完成为止。
我现在遇到的问题是进度条还没走到尽头,就开始另一段数据转移了,感觉是程序比显示快了,看上去不那么和谐,所以我想进度条走到尽头之后,停留半秒,再开始另一段数据的转移。主要代码如下:
//这是线程循环里面
private void dataMove(int i,int j)
{
if (this.InvokeRequired)
{
SetPos setpos = new SetPos(dataMove);
this.Invoke(setpos, new object[] { i,j });
}
else
{ progressBar1.Maximum = Convert.ToInt32(total); //设定进度条最大值为查询的记录数
progressBar1.Step = Convert.ToInt32(Math.Ceiling(everycount / 5)); //进度条每次增加
if (progress != Convert.ToDecimal(lblTotal.Text))
{
progress += Convert.ToInt32(everycount); //设置分段值
}
timer1.Start();
thread.Suspend(); //挂起线程 //执行迁移
if (!bsERP.BL.b_productProduceScan.SaveData(trans, Convert.ToInt32(everycount), j))//如果返回false,则记录其条数
{
MessageBox.Show(lblTableName.Text +"迁移失败!","系统提示");
trans.Rollback();
return;
}
}
}
//计时设置进度条前进
private void timer1_Tick(object sender, EventArgs e)
{
if (progressBar1.Value < progress) //如果进度条的值未达到分段值
{
if ((progressBar1.Value + progressBar1.Step) < progressBar1.Maximum)
{
progressBar1.Value += progressBar1.Step; //进度条增加设定的Step
lblPercent.Text = (Convert.ToDecimal(progressBar1.Value) / Convert.ToDecimal(lblTotal.Text) * 100).ToString("0.00"); //当前百分比
lblCurrent.Text = progressBar1.Value.ToString();
}
else
{
progressBar1.Value = progressBar1.Maximum;
lblPercent.Text = (100).ToString();
}
}
else
{
if (thread.ThreadState.ToString() != "Unstarted")
{
thread.Resume(); //继续挂起的线程
}
timer1.Stop();
}
}
统计一段数据总量,显示在界面,共有10多段数据。开始转移数据,转移时进度条与转移的进度要一致,每转移成功一段数据,进度条就到尽头一次,直到10多段数据全部完成为止。
我现在遇到的问题是进度条还没走到尽头,就开始另一段数据转移了,感觉是程序比显示快了,看上去不那么和谐,所以我想进度条走到尽头之后,停留半秒,再开始另一段数据的转移。主要代码如下:
//这是线程循环里面
private void dataMove(int i,int j)
{
if (this.InvokeRequired)
{
SetPos setpos = new SetPos(dataMove);
this.Invoke(setpos, new object[] { i,j });
}
else
{ progressBar1.Maximum = Convert.ToInt32(total); //设定进度条最大值为查询的记录数
progressBar1.Step = Convert.ToInt32(Math.Ceiling(everycount / 5)); //进度条每次增加
if (progress != Convert.ToDecimal(lblTotal.Text))
{
progress += Convert.ToInt32(everycount); //设置分段值
}
timer1.Start();
thread.Suspend(); //挂起线程 //执行迁移
if (!bsERP.BL.b_productProduceScan.SaveData(trans, Convert.ToInt32(everycount), j))//如果返回false,则记录其条数
{
MessageBox.Show(lblTableName.Text +"迁移失败!","系统提示");
trans.Rollback();
return;
}
}
}
//计时设置进度条前进
private void timer1_Tick(object sender, EventArgs e)
{
if (progressBar1.Value < progress) //如果进度条的值未达到分段值
{
if ((progressBar1.Value + progressBar1.Step) < progressBar1.Maximum)
{
progressBar1.Value += progressBar1.Step; //进度条增加设定的Step
lblPercent.Text = (Convert.ToDecimal(progressBar1.Value) / Convert.ToDecimal(lblTotal.Text) * 100).ToString("0.00"); //当前百分比
lblCurrent.Text = progressBar1.Value.ToString();
}
else
{
progressBar1.Value = progressBar1.Maximum;
lblPercent.Text = (100).ToString();
}
}
else
{
if (thread.ThreadState.ToString() != "Unstarted")
{
thread.Resume(); //继续挂起的线程
}
timer1.Stop();
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货