none
为什么ProgressBar从空白到满格的所用时间不由人控制? RRS feed

  • 问题

  • 请问,我在Visual Basic 2005中输入了以下代码:

        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles T1.Tick
            Timer1.Start()
            If ProgressBar1.Value < 100 Then
                ProgressBar1.Value = ProgressBar1.Value + 1
            End If

        End Sub

    并且我将ProgressBar的Value值设置为5000,可为什么一调试,ProgressBar从空白到满格只用了不到1秒?

    平台:Microsoft Visual Basic 2005

    操作系统:Microsoft Windows Vista Premiun

    2008年9月12日 13:08

答案

全部回复

  • 你好,你的描述不够准确,比如ProgressBar1的maxinum和mininum,还有Timer1的Interval你都没给出,根据以上代码很难看出原因

    2008年9月13日 2:06
  • Code Snippet

    并且我将ProgressBar的Value值设置为5000

     

     

    是不是写错了?
    2008年9月16日 5:25
    版主

  • 1.逻辑有问题,造成N次嵌套
    因为,触发 Tick时,您使用了 timer.Start 方法。造成了 多次实例触发,而且其效果是累加的
    比如:您设置 间隔时间为5s,那么在多次累加的情况下,它可能  第5s时触发N次,直接把  Value 值 累加到 或者 超过 MaxValue。出现这个现象

    2.大部分Timer间隔时间是以毫秒为单位的,也就是说   数值5000(毫秒)=5秒  500(毫秒)=半秒,不知道这点您注意了没有。

    3.把  Timer1。Start()注释掉,逐行跟踪下,看看是否还有同样异常出现。



    2008年9月24日 8:07
  • 在循环中加一个sleep

    Code Snippet

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles T1.Tick
            Timer1.Start()
            If ProgressBar1.Value < 100 Then
                ProgressBar1.Value = ProgressBar1.Value + 1

           Threading.Thread.Sleep(1000) '表示停顿1秒

            End If

        End Sub                 

     

     

    这样你就能看到进度条平滑的滚动着

    2008年9月24日 8:15
    版主
  • maxinum=100

    mininum=0

    Interval=100000000

     

    2008年10月26日 13:53