请教VB.NET中Timer控件问题(Tick无法运行到)
我的程序中有一段延时程序,是利用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的终止调试才停止软件的运行
不明白为什么不能正常运行,请教各位高手,究竟是什么问题,如何解决这个延时问题?
问题点数:20、回复次数:7Top
1 楼rzpc(淡蓝色)回复于 2005-06-01 22:41:32 得分 5
延时没有这么干的,呵呵
计算机执行程序就像是一个人在跑步
延时,只须让跑步的人休息一下即可。而不是让这个人原地不停地转圈跑,那多累啊。
延时 很简单的,控制一下当前的线程即可,语法如下:
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.SleepTop
2 楼AntingZ(夕惕若)回复于 2005-06-01 22:43:03 得分 15
你的代码中其他地方有没有: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 SubTop
3 楼AntingZ(夕惕若)回复于 2005-06-01 22:45:17 得分 0
如果仅仅是为了延时的话,因该用rzpc(淡蓝色)的方法比较合适Top
4 楼AntingZ(夕惕若)回复于 2005-06-01 22:48:54 得分 0
to rzpc(淡蓝色):
例3:延时1年
For I as Integer = 1 to 365:Threading.Thread.Sleep(86400000):Next
Threading.Thread.Sleep
哈哈,这个例子太cool了
Top
5 楼Ninputer(装配脑袋)回复于 2005-06-02 08:31:40 得分 0
用rzpc(淡蓝色)的方法延时会让主线程失去响应,呈死机状。楼主应该是想“空闲延时”,即延时执行方法,但同时可以进行其他操作。这里最好根据你需求重新设计一下,因为空闲延时会造成不同步问题。Top
6 楼AntingZ(夕惕若)回复于 2005-06-02 08:50:09 得分 0
‘结合循环
For i As Int32 = 1 To 20
Application.DoEvents()
Threading.Thread.Sleep(50)
NextTop
7 楼ls_hndd(三人行必有吾师)回复于 2005-06-02 22:22:26 得分 0
markTop




