日期:2014-05-18  浏览次数:20832 次

进度条的使用
现要对一个数据表进行备份,由于数据较多(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;
}