【问题标题】:c# progress bar starting at old value on second runc# 进度条在第二次运行时从旧值开始
【发布时间】:2020-07-24 16:20:39
【问题描述】:

所以我有一个快速文件移动程序,它工作正常,进度条在工作时显示正确的百分比,但是当我第二次运行它时。进度条从最后一个值开始。即使我首先更新 progressbar1.value = 0; 使进度条从零重新启动的唯一方法是关闭程序并重新启动它

   private void button_move_Click(object sender, RoutedEventArgs e)
   {
        worker = new BackgroundWorker();
        worker.DoWork += new DoWorkEventHandler(Worker_DoWork);
        worker.ProgressChanged += new ProgressChangedEventHandler(Worker_ProgressChanged);
        worker.WorkerReportsProgress = true;
        worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Worker_RunWorkerCompleted);
        worker.RunWorkerAsync();
  }

    private void Worker_DoWork(object sender, DoWorkEventArgs e)
    {
        try
        {
            //neither updating the Value to 0 or ReportProgress to 0 worked
            //progressbar1.Value = 0;
            //worker.ReportProgress(0);

            moveFiles(sender, e, dirFiless);
        }

        catch (Exception ex)
        {
            Console.WriteLine("Error trying to Move files: " + ex);
        }
    }
    private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        progressbar1.Value = e.ProgressPercentage;
        progressbar1.Value = e.ProgressPercentage - 1;
    }

    private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
            progressbar1.Value = 0;
            return;
    }

    //this works and the progress bar gets updated incrementally 
    public void moveFiles(object sender, DoWorkEventArgs e, string[] dirFiles)  
    {
        totalFiles = dirFiles.Length;
        foreach (string file in dirFiles)
        {
               filecount++;
               percentage = (int)((filecount * 100) / totalFiles);
               worker.ReportProgress(percentage);
               //move file
        }
        worker.ReportProgress(100);
    }

【问题讨论】:

  • 您的所有成员字段在哪里,例如你重置filecount,因为我只看到在你的代码中增加它。此外,清理一下它会有所帮助,因为目前您提出的问题的代码中有很多噪音:) 请参阅here
  • 谢谢@DAXaholic 我刚刚清理了我的代码,使其更易于阅读。是的,我没有重置文件计数。 (facepalm) 这就是为什么它一直从旧值开始:)

标签: c# progress-bar backgroundworker


【解决方案1】:

您是否要将您的 filecount 变量重置为 0?在您发布的代码中,它似乎只是在每次运行时不断计数,即使您之前将进度条设置回 0,也会导致进度条跳回。

【讨论】:

  • 绝对不是。非常菜鸟的错误。我没有在进程结束时清除文件计数。谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
相关资源
最近更新 更多