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