在下面的代码中,根据for循环显示进度条。但是在for循环中,Filecount是可变的意味着它取决于文件的数量。如果文件计数可分为100,如5,10,20,则下面的代码工作正常,但如果Filecount为6,7,13,则即使for循环已完成,进度条也未显示完成。如果Filecount可以是任何数字并且进度条应显示为声明校准并与for循环同步,那么逻辑应该是什么? 请参阅以下代码 -
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Shown += new EventHandler(Form1_Shown);
// To report progress from the background worker we need to set this property
backgroundWorker1.WorkerReportsProgress = true;
// This event will be raised on the worker thread when the worker starts
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
// This event will be raised when we call ReportProgress
backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
}
void Form1_Shown(object sender, EventArgs e)
{
// Start the background worker
backgroundWorker1.RunWorkerAsync();
}
// On worker thread so do our thing!
void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
int temp = 0;
int Filecount = 7;
// Your background task goes here
for (int i = 0; i < Filecount; i++)
{
int Progress = 100 / Filecount;
temp = temp + Progress;
// Report progress to 'UI' thread
backgroundWorker1.ReportProgress(temp);
// Simulate long task
System.Threading.Thread.Sleep(100);
}
}
// Back on the 'UI' thread so we can update the progress bar
void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// The progress percentage is a property of e
progressBar1.Value = e.ProgressPercentage;
}
}
答案 0 :(得分:2)
由于四舍五入,您的整数100 / FileCount
可能无法提供您想要的结果。
我通常这样做:
ReportProgress(100 * fileIndex / fileCount)
您可能需要(fileIndex + 1),或者您可能希望在最后使用100作为单独的操作显式调用它。您可能还关心在耗时的操作之前或之后(或两者)调用ReportProgress。
答案 1 :(得分:0)
无论如何,进度条总是近似值,特别是如果你处理的是一些不能很好地除以100的步骤(如果你使用的是百分比)。
只需在循环结束时添加一行,将进度设置为100%,就可以了。