报告进度
问题描述:
我试着去解密文件的进展报告,以显示它在一个进度条,这是我能解密功能报告进度
private static void Decrypt(String inName, String outName, byte[] rijnKey, byte[] rijnIV)
{
FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
fout.SetLength(0);
byte[] bin = new byte[1048576];
long rdlen = 0;
long totlen = fin.Length;
int len;
SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();
CryptoStream encStream = new CryptoStream(fout, rijn.CreateDecryptor(rijnKey, rijnIV), CryptoStreamMode.Write);
while (rdlen < totlen)
{
len = fin.Read(bin, 0, bin.Length);
encStream.Write(bin, 0, len);
rdlen = rdlen + len;
//Call here a method to report progress
}
encStream.Close();
fout.Close();
fin.Close();
}
我想调用一个方法来报告内循环进度,但取决于方法的响应时间,这可能会降低解密器的性能,如何在没有此问题的情况下报告进度? 谢谢!
答
一种你一些建议:
- 在您的报告方法,把它作为检查它有多长,因为它最后一次报道。如果它小于0.3s,它会在没有做任何事情的情况下返回 - 没有进度条需要每秒更新超过3次。
和/或
- 卸载报告方法到另一个线程的工作 - 这样的循环中的方法将立即返回(你的循环可以继续向右走)。在另一个线程的方法中,如果前一个报告线程还没有完成,请包含一个检查,以便不启动另一个线程(即只是返回而不执行任何操作)。
或者简单一些,这很可能在你的情况下工作,包括通过你的循环在你的循环计数,然后每ñ时间,做你的进度报告和ñ值重置为零。通过实验选择ň值,以便更新往往不够(一对夫妇次每秒),但你没有做更多的比你有进步更新。例如如果您的循环以每秒3000次的速度迭代,则每1000次更新一次就可以了。
+0
所以我可以创建一个线程与报告方法,并启动它只有当它死了。谢谢! – Lolrapa
你解密在后台线程?你如何报告进度?显示该代码。 – msitt