[英]Progress bar percentage
有人可以告訴我如何獲得正確的進度百分比數字嗎? 我的價值超過100%-似乎無法解決這個問題。
謝謝
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker backgroundWorker = (BackgroundWorker)sender;
string[] strArray = txtSource.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
Int32 i = 0;
foreach (string item in strArray)
{
//Thread.Sleep(250);
string returnMessage = DoAction(item).Replace(nl,"");
i++;
backgroundWorker.ReportProgress(i, item + " ..." + returnMessage);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
lblProgress.Text = "Progress: " + e.ProgressPercentage.ToString() + "% complete, processing: " + e.UserState.ToString();
txtResults.Text += "Processing " + e.UserState.ToString() + nl;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
btnRun.Enabled = true;
lblProgress.Text = "Action completed!";
}
由於您在strArray
每次迭代中都增加i
,因此在此處僅將i
用作執行百分比是不正確的,因為僅當數組包含100個項目時,它才是准確的執行百分比:
backgroundWorker.ReportProgress(i, item + " ..." + returnMessage);
您可以簡單地使用(100 * i) / strArray.Length
代替。
這是因為strArray
有100多個項目。 這樣做-
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker backgroundWorker = (BackgroundWorker)sender;
string[] strArray = txtSource.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
Int32 i = 0;
int iLength = strArray.Length;
foreach (string item in strArray)
{
//Thread.Sleep(250);
string returnMessage = DoAction(item).Replace(nl,"");
i++;
backgroundWorker.ReportProgress(i/iLength , item + " ..." + returnMessage);
}
}
您可能想要更改backgroundWorker.ReportProgress(i, item + " ..." + returnMessage);
到backgroundWorker.ReportProgress(i / strArray.Length , item + " ..." + returnMessage);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.