VB 6.0每隔几秒刷新标签的问题

testpwd 2010-06-02 04:59:09
我在VB 6.0中写了一个简单的程序,界面上就一个按钮控件和一个标签控件(Label)

然后在按钮的点击事件中写如下代码,就是每隔2秒,就在Label上显示当前秒数:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()

Dim a As Integer

a = 0

Do Until a > 10

Sleep 2000

Label1.Caption = "ok" & a

a = a + 1

Loop

End Sub

结果执行这个exe的时候界面总是像死掉一样,而单步调试却一点问题也没有,请教各位大侠!
...全文
179 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liye9801 2010-06-07
  • 打赏
  • 举报
回复
Dim a As Integer
a = 0
Do Until a > 10

Sleep 2000

Label1.Caption = "ok" & a
a = a + 1
Loop

看看你的代码, 第次执行 Sleep 2000 主进程等待两秒再执行,而下面的代码,
Label1.Caption = "ok" & a
a = a + 1
仅用很少时间执行结束,然后又 Sleep 了。

要知道 Label1.Caption = "ok" & a 并不是直接修改了程序界面,而发送一个消息由主程序完成的。
你可以这样理解 Label1.Caption = "ok" & a 是你告诉主程序把改界面改成这样,但程序不会等彻底改完再向下执行,大多情况下在主程序还没有执行完界面刷新时,又Sleep了。
导致程序假死。。。


yanlongwuhui 2010-06-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 testpwd 的回复:]
guyehanxinlei大侠能否说仔细点?我对VB不太熟悉。
[/Quote]
在LOOP前面加上一句:DoEvents
c1c2c33 2010-06-05
  • 打赏
  • 举报
回复
用sleep就是不对了。。
这样要是界面不卡才怪呢。。
阿双2009 2010-06-04
  • 打赏
  • 举报
回复
testpwd 2010-06-04
  • 打赏
  • 举报
回复
sleep 2000 的确会使当前线程(也就是主线程)挂起,但是2秒钟过后,线程不是就恢复了么?再刷新界面

有什么不对呢?
  • 打赏
  • 举报
回复
还是该用Timer控件吧.
水猿兵团五哥 2010-06-04
  • 打赏
  • 举报
回复
sleep 是什么? 英文是睡觉

你说你都要人家睡觉了,你还想做什么?

blues_zhao_yang 2010-06-04
  • 打赏
  • 举报
回复
Sleep 2000
会使当前线程挂起,你这个代码在主线程中,而不是在子线程中,所以会导致界面卡死

解决方法:
一、创建子线程,将代码放入子线程中
二、不用Sleep函数,改用Timer来实现定时效果
波导终结者 2010-06-02
  • 打赏
  • 举报
回复
每隔二秒,你应该用Timer控件做,哪有人用循环和sleep搞死的
testpwd 2010-06-02
  • 打赏
  • 举报
回复
自己顶一下。
testpwd 2010-06-02
  • 打赏
  • 举报
回复
guyehanxinlei大侠能否说仔细点?我对VB不太熟悉。
guyehanxinlei 2010-06-02
  • 打赏
  • 举报
回复
在循环中必要的地方加DoEvents

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧