【发布时间】: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