c# 进度条从第二个 运行 的旧值开始

c# progress bar starting at old value on second run

所以我有一个快速文件移动程序,它工作正常,进度条在工作时显示正确的百分比,但是当我 运行 第二次显示它时。进度条从最后一个值开始。即使我首先更新 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 变量重置回 0 吗?在您发布的代码中,它似乎一直在对每个 运行 进行计数,这会导致进度条跳回,即使您之前将其设置回 0。