[英]C# progress bar not updating with backgroundworker
我正在嘗試創建一個加密/解密GUI,並且具有我想要的所有功能。 問題是我在加密文件時試圖使進度條運行。 我在線搜索文章,他們都告訴我要使用backgroundWorker,以便進度條可以在單獨的線程上運行,而不會凍結UI界面。 但是,我似乎無法使進度條顯示任何內容。
public partial class Form1 : Form
{
static string key = "";
cSecureData ed = new cSecureData(key);
public Form1()
{
InitializeComponent();
InitializeEncryptBG();
}
private void InitializeEncryptBG()
{
encryptBG.DoWork += new DoWorkEventHandler(encryptBG_DoWork);
encryptBG.RunWorkerCompleted += new RunWorkerCompletedEventHandler(encryptBG_RunWorkerCompleted);
encryptBG.ProgressChanged += new ProgressChangedEventHandler(encryptBG_ProgressChanged);
}
private void btnEncrypt_Click(object sender, EventArgs e)
{
this.btnEncrypt.Enabled = false;
this.btnDecrypt.Enabled = false;
/*if (Rijndael.Checked == true)
{
ed.EncryptFile(textBox1.Text, textBox2.Text, "1");
}
else if (TripleDES.Checked == true)
{
ed.EncryptFile(textBox1.Text, textBox2.Text, "2");
}*/
encryptBG.RunWorkerAsync();
}
private void encryptBG_DoWork(object sender, DoWorkEventArgs e)
{
if (Rijndael.Checked == true)
{
ed.EncryptFile(textBox1.Text, textBox2.Text, "1");
}
else if (TripleDES.Checked == true)
{
ed.EncryptFile(textBox1.Text, textBox2.Text, "2");
}
FileInfo fInfo1 = new FileInfo(textBox1.Text);
FileInfo fInfo2 = new FileInfo(textBox2.Text);
double totSize = fInfo1.Length;
double curSize = fInfo2.Length;
while (curSize <= totSize)
{
Thread.Sleep(100);
double percentage = curSize / totSize * 100;
encryptBG.ReportProgress((int)percentage);
}
}
private void encryptBG_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
}
private void encryptBG_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
btnEncrypt.Enabled = true;
btnDecrypt.Enabled = true;
MessageBox.Show("Done");
}
}
我的加密方法不在這里,因為我要從另一個項目中引用該方法。
問題在這里:
while (curSize <= totSize)
{
Thread.Sleep(100);
double percentage = curSize / totSize * 100;
encryptBG.ReportProgress((int)percentage);
}
什么也curSize
改變while
循環內的curSize
或totSize
的值,因此您將遇到無限循環。 percentage
值在每次迭代中都是相同的,因此ProgressBar
永遠不會更改值,並且會顯示為“卡住”。
您需要弄清楚該循環內應該發生的情況,並修改curSize
的值,以使百分比發生變化, ProgressBar
移動,並且循環最終結束。
也許我缺少了一些東西,但是我看不到您將cryptoBG_ProgressChanged方法綁定到cryptoBG事件的位置。 通常,事件綁定在代碼中類似於“ .OnProgressChanged + = cryptoBG_ProgressChanged ...”。
您的那部分代碼在這里不可見,因此可能是一個看起來的地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.