价值没有反映在进度条上

时间:2012-11-14 07:01:18

标签: c#

朋友,这是我的代码(如下)。我无法弄清楚为什么价值的变化没有反映在进度条上。

    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相同。请教我帮忙。 提前发表您的宝贵意见。 。

3 个答案:

答案 0 :(得分:1)

您的代码阻止了UI线程,因此它不会更新。您需要使用某种类型的后台线程来触发告诉UI线程更新的事件。谷歌“后台处理c#”了解一些细节。

答案 1 :(得分:1)

如果您为每次更改值更新它,它仍会阻止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");
            }

此代码只需几秒钟;)

答案 2 :(得分:0)

ProgressBar可以取0到100之间的值

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