任务完成后,C# 进度栏将更新



所以我正在开发一个下载管理器,我也实现了暂停/恢复功能。但是为了在恢复下载时获取进度条值,我还需要在下载停止之前获取文件的现有长度。像这样的东西。

    private void updateProgressBar(DownloadProgressChangedEventArgs e)
    {
        if (InvokeRequired)
            Invoke((MethodInvoker)delegate ()
            {
                updateProgressBar(e);
            });
        else
        {
            downloadProgressBar.Value = Convert.ToInt32((e.BytesReceived + existFileSize)/(e.TotalBytesToReceive + existFileSize)*100);
        }
    }

其中 existFileSize 是现有文件暂停后的大小。但由于某种原因,进度条仅在下载完成后更新。但如果我说,

    downloadProgressBar.Value = e.ProgressPercentage;

这代替了前一行,它工作得很好,但没有给出我想要的结果。

任何帮助或建议将不胜感激。

看起来您正在执行整数算术。 当你计算时

(e.BytesReceived + existFileSize)/(e.TotalBytesToReceive + existFileSize)

此计算的结果是一个整数,即 0 或 1。 因此,您的进度条从 0 跳到 100,并且不能介于两者之间。

尝试将上述部分更改为:

(e.BytesReceived + existFileSize)/(double)(e.TotalBytesToReceive + existFileSize)

这将使此计算的结果成为浮点值,然后给出一个值,该值将按照您的预期在 0 到 100 之间变化。

编辑

实际上,更有效的方法是:

downloadProgressBar.Value = Convert.ToInt32( (e.BytesReceived + existFileSize) * 100 / (e.TotalBytesToReceive + existFileSize));

请注意,它现在乘以 100,然后再除以要接收的总数。

希望这有帮助

我认为您的除法(e.BytesReceived + existFileSize)/(e.TotalBytesToReceive + existFileSize)可能是将整数除以整数,这将得到整数结果。 由于(e.BytesReceived + existFileSize)将小于 (e.TotalBytesToReceive + existFileSize) ,因此您得到的结果将始终为 0。

而是将这些值强制转换为浮点数,以便结果也是浮点数。

downloadProgressBar.Value = Convert.ToInt32((float)(e.BytesReceived + existFileSize)/(float)(e.TotalBytesToReceive + existFileSize)*100);

相关内容

  • 没有找到相关文章

最新更新