作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个小型应用程序,用于计算从任何给定文件到多种类型的哈希算法的哈希值。
为简单起见,我将只关注一种处理器密集型算法,即使文件约为 15mb,计算哈希值也需要大约半分钟。
我正在使用 BackgroundWorker 运行计算(我不确定这是否是正确的计算方法,但我只是在试验)。
现在,我想要一个进度条来显示散列过程,但我不知道如何获得所需的最大值,也不知道将 DoStep 方法放在哪里。
有什么想法吗?
我的代码:
private void btnBrowse_Click(object sender, EventArgs e)
{
ofdBrowse.Filter = "All Files|*.*";
ofdBrowse.Title = "Open file.";
if (ofdBrowse.ShowDialog() == DialogResult.OK)
{
txtPath.Text = ofdBrowse.FileName;
bwWorker.RunWorkerAsync();
}
}
private void bwWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
t5 = hash.HashSHA512(txtPath.Text);
}
void bwWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
txtSHA512.Text = t5;
}
最佳答案
为了能够监控进度,您必须以小增量进行散列。然后您将能够计算您自己完成的文件的百分比。
这方面的构建基 block 是 HashAlgorithm.TransformBlock
和 HashAlgorithm.TransformFinalBlock
.
在循环中调用TransformBlock
,并使用事件,或者BackgroundWorker.ReportProgress
向 UI 传达进度。
这older question has an answer有一个很好的使用 TransformBlock
的例子,在 TransformBlock
的文档中也有一个例子。 .
关于c# - 如何在散列文件时监视状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9052515/
我是一名优秀的程序员,十分优秀!