簡體   English   中英

價值沒有反映在進度條上

[英]Value not reflecting on the Progress Bar

朋友,這是我的代碼(下)。 我無法弄清楚為什么價值的變化沒有反映在進度條上。

    void Code()
    {
        string key;
        for (int i = 0; i < 26; i++)
            for (int j = 0; j < 10; j++)
                for (int k = 0; k < 26; k++)
                    for (int l = 0; l < 10; l++)
                        for (int m = 0; m < 26; m++)
                        {
                            key = (char)(65 + i) + " " + j.ToString() + " " + (char)(65 + k) + " " + l.ToString() + " " + (char)(65 + m);
                            File.AppendAllText("D:\\Codes.txt", key + Environment.NewLine);
                            val = (i + 1) * (j + 1) * (k + 1) * (l + 1) * (m + 1);
                            MyProgressBar.Value = val;
                            MyProgressBar.Text = (val * 100 / 1757600).ToString() + "%";
                            if (val == 1757600)                                                                    
                                MessageBox.Show("Code generation completed");
                        }
    }

進度條的值和文本屬性保持與For Load相同。 請教我幫忙。 提前發表您的寶貴意見。

您的代碼阻止了UI線程,因此它不會更新。 您需要使用某種類型的后台線程來觸發告訴UI線程更新的事件。 google“后台處理c#”了解一些細節。

如果您為每個值更改更新它,它仍將阻止UI。 而這個File.AppendAllText是你代碼中最慢的部分..如果我發表評論它會在幾秒鍾內運行到最后..你想嘗試將所有代碼保存到一個數組中,然后打印所有代碼到一度? 我想這會快一點。

                    string[] key = new string[1757600];

            private void backgroundWorker3_DoWork(object sender, DoWorkEventArgs e)
            {
                int val = 0;
                for (int i = 0; i < 26; i++)
                {
                    for (int j = 0; j < 10; j++)
                    {
                        for (int k = 0; k < 26; k++)
                        {
                            for (int l = 0; l < 10; l++)
                            {
                                for (int m = 0; m < 26; m++)
                                {
                                    key[val] = (char) (65 + i) + " " + j.ToString() + " " + (char) (65 + k) + " " + l.ToString() + " " +
                                          (char) (65 + m);
                                    //File.AppendAllText("D:\\Codes.txt", key + Environment.NewLine);
                                    //val = (i + 1)*(j + 1)*(k + 1)*(l + 1)*(m + 1);
                                    val++;
                                }
                            }
                    backgroundWorker3.ReportProgress(val);
                        }
                    }
                }
            }

            private void backgroundWorker3_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                MyProgressBar.Value = e.ProgressPercentage;
                MyProgressBar.Text = e.ProgressPercentage.ToString() + "%";
                //if (e.ProgressPercentage == 1757600)
            }

            private void backgroundWorker3_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                File.WriteAllLines("D:\\Codes.txt", key);
                MessageBox.Show("Code generation completed");
            }

這段代碼只需幾秒鍾;)

ProgressBar可以取0到100之間的值

MyProgressBar.Value = (val * 100 / 1757600);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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