请教VB.NET中Timer控件问题(Tick无法运行到)

时间:2021-09-26 14:23:15
我的程序中有一段延时程序,是利用timer控件的,其程序如下: 
Timer1.Interval = 1000 
Timer1.Enabled = True 
While Not TT 
  Application.DoEvents() 
End While 
Timer1.Enabled = False 
TT = False 

而timer处理程序如下: 
Private Sub timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) 
  TT = True 
End Sub 

然而在调试程序时,我用当运行到Application.DoEvents()时,就一直停滞不前,逐步调试程序一直停留在Application.DoEvents()中,而全速运行时timer.Interval的值一直是1000,TT的值为false,而CPU的使用率达到99%。无论怎样运行,CPU的使用率达到99%,在VS中按暂停后指示运行到Application.DoEvents(),就算是关闭所编的软件,软件没有自动关闭,CPU还是99%,按VS暂停按钮后还是指示运行到Application.DoEvents(),只有按VS的终止调试才停止软件的运行

不明白为什么不能正常运行,请教各位高手,究竟是什么问题,如何解决这个延时问题?

7 个解决方案

#1


延时没有这么干的,呵呵

计算机执行程序就像是一个人在跑步
延时,只须让跑步的人休息一下即可。而不是让这个人原地不停地转圈跑,那多累啊。

延时  很简单的,控制一下当前的线程即可,语法如下:
Threading.Thread.Sleep(延时时间-[毫秒])

例1:延时3秒
Threading.Thread.Sleep(3000)

例2:延时1小时
Threading.Thread.Sleep(3600000)

例3:延时1年
For I as Integer = 1 to 365:Threading.Thread.Sleep(86400000):Next
Threading.Thread.Sleep

#2


你的代码中其他地方有没有:AddHandler Timer1.Tick, AddressOf Timer1_Tick

或者是你的
Private Sub timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) 
  TT = True 
End Sub 
漏了Handles Timer1.Tick
这样看看:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        TT = True
End Sub

#3


如果仅仅是为了延时的话,因该用rzpc(淡蓝色)的方法比较合适

#4


to rzpc(淡蓝色):
例3:延时1年
For I as Integer = 1 to 365:Threading.Thread.Sleep(86400000):Next
Threading.Thread.Sleep

哈哈,这个例子太cool了 

#5


用rzpc(淡蓝色)的方法延时会让主线程失去响应,呈死机状。楼主应该是想“空闲延时”,即延时执行方法,但同时可以进行其他操作。这里最好根据你需求重新设计一下,因为空闲延时会造成不同步问题。

#6


‘结合循环
        For i As Int32 = 1 To 20
            Application.DoEvents()
            Threading.Thread.Sleep(50)
        Next

#7


mark

#1


延时没有这么干的,呵呵

计算机执行程序就像是一个人在跑步
延时,只须让跑步的人休息一下即可。而不是让这个人原地不停地转圈跑,那多累啊。

延时  很简单的,控制一下当前的线程即可,语法如下:
Threading.Thread.Sleep(延时时间-[毫秒])

例1:延时3秒
Threading.Thread.Sleep(3000)

例2:延时1小时
Threading.Thread.Sleep(3600000)

例3:延时1年
For I as Integer = 1 to 365:Threading.Thread.Sleep(86400000):Next
Threading.Thread.Sleep

#2


你的代码中其他地方有没有:AddHandler Timer1.Tick, AddressOf Timer1_Tick

或者是你的
Private Sub timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) 
  TT = True 
End Sub 
漏了Handles Timer1.Tick
这样看看:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        TT = True
End Sub

#3


如果仅仅是为了延时的话,因该用rzpc(淡蓝色)的方法比较合适

#4


to rzpc(淡蓝色):
例3:延时1年
For I as Integer = 1 to 365:Threading.Thread.Sleep(86400000):Next
Threading.Thread.Sleep

哈哈,这个例子太cool了 

#5


用rzpc(淡蓝色)的方法延时会让主线程失去响应,呈死机状。楼主应该是想“空闲延时”,即延时执行方法,但同时可以进行其他操作。这里最好根据你需求重新设计一下,因为空闲延时会造成不同步问题。

#6


‘结合循环
        For i As Int32 = 1 To 20
            Application.DoEvents()
            Threading.Thread.Sleep(50)
        Next

#7


mark