【问题标题】:Progressbar lag?进度条滞后?
【发布时间】:2014-07-14 19:52:59
【问题描述】:

我只是在 vb express 2008 中玩弄,我决定玩进度条控件。我设置了两个标签和一个计时器,以使进度条值上升,然后在达到极限时下降。然后它重复这个。它工作得很好,除了进度条对增量的响应很慢并且它在其增量周期结束时跳到最大值。我将计时器设置为 1 毫秒间隔,这是我的代码,

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

    If Label2.Text = "100" Then
        number = number - 1
        Label3.Text = number
        ProgressBar1.Value = number
        ProgressBar1.Update()
    End If
    If Label3.Text = "0" Then
        number = number + 1
        Label2.Text = number
        ProgressBar1.Value = number
        ProgressBar1.Update()
    End If
End Sub

【问题讨论】:

  • number 变量在哪里创建/设置?就您那里的代码而言,似乎number、您的标签和进度条永远不会改变,除非值是1000?这是故意的吗?你能澄清一下你的代码到底应该做什么吗?
  • 与我的回答相关的声音:stackoverflow.com/a/23682919/1842065
  • 这是正常的,ProgressBar 动画进度。让它平稳地增加,即使你强迫它踩。动画不可避免地会导致滞后。你移动得太快了。一个愚蠢的技巧是强迫它过冲然后向后移动。
  • @HansPassant - 是的,我同意,这就是我在回答中的建议。
  • @Codemaverick number 不断变化,并在递增时在 label2 中表示,直到达到 100,然后递减并在 label3 中表示,直到为 0。进度条只是反映 @987654328 的值@.

标签: vb.net progress-bar


【解决方案1】:

首先,我会将间隔设置为 500 之类的值,然后再逐步回到 400、300、200、100 等,直到获得所需的速度。

其次,假设 Label2 是您的 max 值,Label3 是您的 min 值,并且您想要您的进度条控件在最小值和最大值之间来回弹跳,我会做这样的事情:

Const MAX_VALUE = 100
Const MIN_VALUE = 0

Dim currentValue = 0
Dim isIncrementing = True

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

    If currentValue = MAX_VALUE Then isIncrementing = False
    If currentValue = MIN_VALUE Then isIncrementing = True

    If isIncrementing Then currentValue += 1 Else currentValue -= 1

    ProgressBar1.Value = currentValue
    ProgressBar1.Update()

End Sub

由于我假设您的 Label2Label3 是您的最小值/最大值,我还假设它们应该保持静态并且永不改变,这这就是为什么我不在Tick 事件中更改它们的值的原因。如果您想要一个当前值标签,那么添加它很容易,并且会同时更改ProgressBar1.Value

【讨论】:

  • 我的意思是提高计时器的时间间隔可以正常工作,但也需要一段时间才能让条形图填满然后再下降。我试过你的代码,它看起来和以前一样,除非我改变定时器间隔。我认为可能没有办法解决动画滞后问题。
  • @NickHallick - 好吧,正如this SO answer 中提到的,有一种 hacky 方法可以绕过它。至于填充和返回所需的时间,您确实说过您只是在“搞砸”,所以您可以只是弄乱间隔以加快速度,或者您可以将currentValue 增加/减少更多不仅仅是1,比如10
  • 是的,我绝不依赖任何明确的答案,我只是在胡闹。我也确实在 vb6 中使用过它,它在那里工作得很好,但我可以在 vb 2008 中使用它作为一个无用的程序!感谢您的洞察力!
  • @NickHallick - 是的,没问题。祝你好运!
猜你喜欢
  • 2014-04-23
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 2019-10-02
  • 1970-01-01
  • 2020-05-09
相关资源
最近更新 更多