报告进度

问题描述:

我试着去解密文件的进展报告,以显示它在一个进度条,这是我能解密功能报告进度

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

你解密在后台线程?你如何报告进度?显示该代码。 – msitt

一种你一些建议:

  1. 在您的报告方法,把它作为检查它有多长,因为它最后一次报道。如果它小于0.3s,它会在没有做任何事情的情况下返回 - 没有进度条需要每秒更新超过3次。

和/或

  1. 卸载报告方法到另一个线程的工作 - 这样的循环中的方法将立即返回(你的循环可以继续向右走)。在另一个线程的方法中,如果前一个报告线程还没有完成,请包含一个检查,以便不启动另一个线程(即只是返回而不执行任何操作)。
  2. 或者简单一些,这很可能在你的情况下工作,包括通过你的循环在你的循环计数,然后每ñ时间,做你的进度报告和ñ值重置为零。通过实验选择ň值,以便更新往往不够(一对夫妇次每秒),但你没有做更多的比你有进步更新。例如如果您的循环以每秒3000次的速度迭代,则每1000次更新一次就可以了。

开始=“2”>
+0

所以我可以创建一个线程与报告方法,并启动它只有当它死了。谢谢! – Lolrapa