进度条百分比
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
中有超过 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);
}
}
由于您在 strArray
的每次迭代中增加 i
,所以在这里使用 i
作为执行百分比是不正确的,因为如果并且仅当您的数组包含 100 个项目时:
backgroundWorker.ReportProgress(i, item + " ..." + returnMessage);
您可以简单地使用 (100 * i) / strArray.Length
。
您可能想将 backgroundWorker.ReportProgress(i, item + " ..." + returnMessage);
更改为 backgroundWorker.ReportProgress(i / strArray.Length , item + " ..." + returnMessage);
有人可以告诉我如何获得正确的进度百分比数字吗?我的值超过 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
中有超过 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);
}
}
由于您在 strArray
的每次迭代中增加 i
,所以在这里使用 i
作为执行百分比是不正确的,因为如果并且仅当您的数组包含 100 个项目时:
backgroundWorker.ReportProgress(i, item + " ..." + returnMessage);
您可以简单地使用 (100 * i) / strArray.Length
。
您可能想将 backgroundWorker.ReportProgress(i, item + " ..." + returnMessage);
更改为 backgroundWorker.ReportProgress(i / strArray.Length , item + " ..." + returnMessage);