【发布时间】:2014-07-23 08:00:00
【问题描述】:
我正在尝试创建一个加密/解密 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");
}
}
我的加密方法不在这里,因为我引用了我制作的另一个项目中的方法。
【问题讨论】:
标签: c# encryption progress-bar backgroundworker