进度条百分比

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);