簡體   English   中英

進度條百分比

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM