c# - 如何在散列文件时监视状态?

标签 c# progress-bar backgroundworker status

我正在构建一个小型应用程序,用于计算从任何给定文件到多种类型的哈希算法的哈希值。

为简单起见,我将只关注一种处理器密集型算法,即使文件约为 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.TransformBlockHashAlgorithm.TransformFinalBlock .

在循环中调用TransformBlock,并使用事件,或者BackgroundWorker.ReportProgress向 UI 传达进度。

older question has an answer有一个很好的使用 TransformBlock 的例子,在 TransformBlock 的文档中也有一个例子。 .

关于c# - 如何在散列文件时监视状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9052515/

相关文章:

c# - 跨线程异常 - 使用 Invoke

c# - 在 MVC5 应用程序中注册期间获取附加信息

c# - 从列表中获取列值

c# - XNA未知内存泄漏导致游戏崩溃

python - 进度条(ttk.Progressbar)与 tkinter 中的 python 不显示

android - 无法从 firebase 数据库中获取值

c# - 在 DoWork() 完成后将变量传递给 RunWorkerCompleted()

c# - 如何在 C# 中通过文本文件中的数字进行数学计算?

下载期间android ProgressBar更新

C# BackgroundWorker 返回一个值