朋友,这是我的代码(如下)。我无法弄清楚为什么价值的变化没有反映在进度条上。
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相同。请教我帮忙。 提前发表您的宝贵意见。 。
答案 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);