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。
所以我有一个快速文件移动程序,它工作正常,进度条在工作时显示正确的百分比,但是当我 运行 第二次显示它时。进度条从最后一个值开始。即使我首先更新 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。