0

对,所以我有 2 个进度条,并且我为计算第二个进度条(总体进度)的进度所做的方程式理论上应该可以正常工作。它适用于第一次下载,但是当它进行第二次下载而不是继续下载时,它会立即跳到 100。

现在我不确定这是因为我的自定义进度条还是因为其他原因。

这是我的进度条代码。

If CProgressBarCurrent.Value >= 1 Then
    CProgressBarTotal.Value = (100 * (currentFileNumber - 1) + CProgressBarCurrent.Value) / Me.fileUrls.Count
End If

这些是功能:

Dim currentFileNumber As Integer = 1

每次下载完成时我都会添加一个。

CProgressBarCurrent.Value

我的第一个进度条的值,它显示了它下载了多少文件。字节明智。

Me.fileUrls.Count

队列中的文件数量。

我还尝试了另一个等式:

CProgressBarTotal.Value = (currentFileNumber / Me.fileUrls.Count + CProgressBarCurrent.Value / 100 / Me.fileUrls.Count) * 100

这也部分有效,但它有同样的问题。当第一次下载完成而不是继续下载时,它只会达到 100%。

我通过计时器滴答来管理它。因此,对于每个滴答声,它都会执行该过程。

这是我的进度条最大值属性:

    Property Maximum As Double
    Get
        Return MaxValue
    End Get
    Set(ByVal value As Double)
        If MaxValue < 0 Then MaxValue = 0 Else If MaxValue < MinValue Then MaxValue = MinValue
        MaxValue = value
    End Set
End Property

这是我的价值属性:

    Property Value As Double
    Get
        Return Percent
    End Get
    Set(ByVal value As Double)
        If value < Minimum Then value = Minimum Else If value > Maximum Then value = Maximum
        Percent = value
        If Percent = 0 Then
            PictureBox1.Width = CInt(value * 3.74)
        Else
            PictureBox1.Width = CInt(value * 3.74 / Maximum * 100)
        End If
    End Set
End Property

我的声明:

    Protected MinValue As Double = 0.0
Protected MaxValue As Double = 100.0
Protected Percent As Double = 0.0

谢谢。

4

2 回答 2

0

如果您只是将第二个进度条的最大值设置为 File.Urls.Count 并为每个完成的文件添加 1,它应该可以正常工作。

于 2013-09-20T19:46:22.567 回答
0

正确的方程式如下:

CProgressBarTotal.Value = ((currentFileNumber - 1) + CProgressBarCurrent.Value / 100 ) * 100 / Me.fileUrls.Count

这来自两个部分:

percentOfCompletedFiles  = (currentFileNumber - 1) / Me.fileUrls.Count * 100
percentCurrentFileReferredAllFiles = CProgressBarCurrent.Value / Me.fileUrls.Count

加在一起并简化整体。

必须满足一些条件才能使其正常工作:

  • Me.fileUrls 还维护列表中已下载的 url
  • CProgressBarCurrent.MaxValue = 100
  • CProgressBarCurrent.Value 返回双精度或浮点数(或可能出现整数除法问题)
于 2013-09-20T19:02:49.003 回答