本人编写了一个系统定时备份程序,但由于需备份的数据比较大,耗费时间较长,想做个与状态同步的进度条显示进度,请教各位前辈高手该怎么做?

解决方案 »

  1.   

    创建一个System.Windows.Forms.ProgressBar。先设置好Minimum、Maximum、Step、Value,然后在循环里用PerformStep更新
      

  2.   

    按照ProgressBar的value属性
    value=100的时候 进度条就满了
    你自己决定在什么时候让他满,什么时候是50% 70%等等
      

  3.   

    this.progressBar1.Style = ProgressBarStyle.Marquee;
      

  4.   

    搞个gif动画显示一下就可以了,再加个文字提示"正在执行备份,请稍候...",如:firefox的进度圈
      

  5.   

    由于备份操作,不能知道准确耗时,所以没法通过PorgressBar的Value设置备份进度.更多的是设置为Marquee样式,让进度度循环运动.
    简单点的法子,通过异步调用就能实现!下面的代码中,界面上放一个按钮(btnBackup)和一个滚动条(progressBar1):
    private void btnBackup_Click(object sender, EventArgs e)
            {
                progressBar1.Style = ProgressBarStyle.Marquee;            MethodInvoker mi = new MethodInvoker(DoBackup);
                mi.BeginInvoke(null, null);
            }        //备份完成
            private void BackupFinish()
            {
                progressBar1.Style = ProgressBarStyle.Blocks;
                MessageBox.Show("备份完成");
            }        //备份方法
            private void DoBackup()
            {
                //执行备份方法
                //.......
                            BeginInvoke(new MethodInvoker(BackupFinish));
            }
      

  6.   

    楼主要的是sql server备份的情况,不会哦!
      

  7.   

    “MethodInvoker mi = new MethodInvoker(DoBackup);” 这句话报错,我的备份方法是带参数的,DoBackup(参数一,参数二)
      

  8.   

    MethodInvoker是一个不带参数的异步调用对象,若要带参数,可用delegate实现.也有个灵活的法子,可以把你DoBackup的参数定义成全局变量,让DoBackup方法不带参数.它用到的参数,通过调用合局变量得到.
      

  9.   


    谢谢,设为全局变量后使用MethodInvoker成功了。能否再给说说,要是使用delegate的话该如何使用?
      

  10.   

    你参照我给你的代码,备份方法的最后,有一个BeginInvoke方法,调用另一个方法,执行备份完成后的操作,如停止滚动:
    BeginInvoke(new MethodInvoker(BackupFinish));
    BackupFinish方法即是备份完成后,执行的方法.
    至于你上面提到的delegate,我希望楼主先自己去研究,不懂了再上来问.这样也许对你的帮助会更大些.