예제 #1
0
        internal void AsyncComputeHashCallback(IAsyncResult result)
        {
            int bytesRead = inputStream.EndRead(result);

            //检查是否到达流末尾
            if (inputStream.Position < inputStream.Length)
            {
                //输出进度
                string pro = string.Format("{0:0.00}", ((double)inputStream.Position / inputStream.Length) * 100);

                AsyncCheckProgress?.Invoke(new AsyncCheckEventArgs(AsyncCheckState.Checking, pro));

                var output = new byte[buffer.Length];
                //分块计算哈希值
                hashAlgorithm.TransformBlock(buffer, 0, buffer.Length, output, 0);

                //异步读取下一分块
                inputStream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(AsyncComputeHashCallback), null);
                return;
            }
            else
            {
                //计算最后分块哈希值
                hashAlgorithm.TransformFinalBlock(buffer, 0, bytesRead);
            }

            string md5 = BitConverter.ToString(hashAlgorithm.Hash).Replace("-", "");

            AsyncCheckProgress?.Invoke(new AsyncCheckEventArgs(AsyncCheckState.Completed, md5));

            //关闭流
            inputStream.Close();
        }
예제 #2
0
 private void MD5Checker_AsyncCheckProgress(AsyncCheckEventArgs e)
 {
     AsyncCheckProgress?.Invoke(this, e);
 }