2017-04-20 1 views
-1

은 진행 표시 줄에 표시하도록 진행 상황을보고 파일을 해독하기 위해 노력하고, 여기에 내가 루프 내부의 진행 상황을보고하는 방법을 호출 할 내 ENT 버튼을 누르면 DVR의 기능신고 진행

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(); 
     } 

입니다 임 방법의 응답 시간에 따라 decrypter의 성능이 저하 될 수 있습니다.이 문제없이 진행 상황을 어떻게보고 할 수 있습니까? 감사합니다.

+0

배경 스레드에서 암호 해독 하시겠습니까? 어떻게 진행 상황을보고하고 있습니까? 그 코드를 보여주세요. – msitt

답변

0

있는 A에 대한 제안의 몇 가지 : 당신의보고 방법에

  1. , 그것은 그것이 마지막보고 이후 얼마나 오래 있었는지에 관해서는 확인해야합니다. 0.3 초보다 작 으면 아무 것도하지 않고 돌아가십시오. 진행 막대를 초당 3 회 이상 업데이트해야합니다. 루프 내 방법은 즉시 반환됩니다 그런 식으로 (루프 계속하기 바로 -

및/또는

오프로드가 다른 스레드 위에보고 방법의 일이
    1. ). 다른 스레드의 메소드에서 이전보고 스레드가 아직 완료되지 않은 경우 다른 스레드를 시작하지 않도록 점검하십시오 (즉, 아무것도 수행하지 않고 리턴하십시오). 당신의 상황에서 작동 할 수

    또는 여전히 간단는, 루프를 통해 루프에서 카운터 다음 모든 N 시간을 포함, 진행 보고서을 0으로 N의 값을 다시 설정합니다. 실험을 통해 n의 값을 선택하십시오. 그러면 충분히 자주 업데이트되고 (초당 두 번씩) 진행중인 업데이트보다 더 많은 업데이트를 수행하지 않게됩니다. 예 : 루프가 초당 3000 회 반복되면 1000 번째 시간마다 업데이트를 수행하면됩니다.

  • +0

    그래서 보고서 메서드로 스레드를 만들고 죽은 경우에만 시작할 수 있습니다. 감사! – Lolrapa