进度条的使用
现要对一个数据表进行备份,由于数据较多(8万条),所以计划弄一个进度条来显示备份进度,但不知道这进度条怎么用?
备份的代码被封装在业务层中,表现层就一句代码:
SystemOperation.Backup();
请问,如何使用进度条显示当前备份进度?
[解决办法]
这样你不可能知道具体的进度。
建议找到一般情况下的备份时间,比如6分钟,然后每6秒钟Increment(10),大致的指示一下。到最后一步的时候,等到Backup结束后显示100%。粗略的表示程序没有死,正在运行(这也正是progressbar的作用)。
[解决办法]
像数据库备份,这种不能准确知道需时的操作,是不需要标明进度的.因为数据库大小,设备快慢都影响到操作的时间,一般是通过显示一个不断运行的滚动条来标示,操作正在进行中。
你在窗体上拖一个ProgressBar控件,把Stype属性设置为“Marquee”,即得一个滚动条。
另外,进度条和备份操作,需要不同的线程。当然,用委托就能实现了!
[解决办法]
webform没弄过
我做过winform的,实时的不太好做,我做的是根据自定进度值执行线程变速的进度条。
用到线程的委托、多线程、计时器
这是部分代码
- C# code
private void button1_Click(object sender, EventArgs e) { c1 = bylProbar.Position; btnStart.Enabled = false; btnClose.Enabled = false; //控制进度条速度 timer1.Interval = 600; timer1.Start(); } private void timer1_Tick(object sender, EventArgs e) { if (c1 == bylProbar.PositionMax) { p1 = 0; timer1.Stop(); bylProbar.Text = "完成!"; btnClose.Enabled = true; } else { if (c1 == bylProbar.PositionMin) { p1 = 1; } else if (c1 == 2) { Thread t1 = new Thread(new ThreadStart(ThreadDBImportForums)); t1.Start(); } else if (c1 == 5) { Thread t2 = new Thread(new ThreadStart(ThreadDBTranfer)); t2.Start(); } else if (c1 == 9) { Thread cha = new Thread(new ThreadStart(ThreadDBImportBlog)); cha.Start(); } } c1 += p1; Application.DoEvents(); bylProbar.Text = c1.ToString() + " %"; bylProbar.Position = c1; if (rows > 0) timer1.Interval = 20; } private void Form1_Load(object sender, EventArgs e) { bylProbar.Text = ""; bylProbar.Position = 0; }
[解决办法]
int b = 总数
int b1 = b;
progressBar1.Maximum = b1;
while (b > 0)
{
b = b - 1;
获取文件一条
int b2 = b + 1;
progressBar1.Value = b1 / b2;
}