这可能是一个点击测试时间程序。DoEvents意思是将程序控制权交出,响应操作系统其他请求,避免一直循环

解决方案 »

  1.   

    这是一种延时,DoEvents的作用就是把系统的控制权交出来,也就是说在延时的这段时间里还可以做其他操作,不至于象死机一样撑在那里
      

  2.   

    兄弟,doevents会将控制权传给操作系统,当操作系统处理完队列中事件,并在sendkeys队列中所有的键也都 已经发送出去后,返回控制权。
    现在打个比方:假如你的代码改为
    Private Sub Command2_Click()
       Static intClick As Integer
       Dim intClickNumber As Integer
       Dim dblEndTime As Double
         
       intClick = intClick + 1
       intClickNumber = intClick
       
       dblEndTime = Timer + 3#
         
       Do While dblEndTime > Timer  '注意这里
       Loop
       MsgBox "Click " & intClickNumber & " is finished"
    End Sub
    那么在循环的时候,他会一直在空转,而且一直占用着cpu控制权,在循环还没结束时,你点击其他的按钮或做其他事情都好,应用程序都“不响应”,其实不是它不响应,而是它一直在忙着,没时间理你。这是就象死机一样拉,直到循环结束。
    但是在循环中加上一个doevents就不一样了。
    没循环一次,执行一次doevents,(看看有没有其他消息需要响应的,有,好的,先去响应别的事情,做好事情后,再回来继续循环),你看,这不就不会死机了吗。
    但是一般最好少用doevents,有时候它会给你带来一些不可预料的问题的。
      

  3.   

    通俗演义:
    因为这里是个循环,可能会循环很长时间,或者干脆就是一个死循环。
    如果没有Doevents,程序就埋头干他的循环,好像死机的样子。
    加了Doevents,每个循环中,程序都照顾一下有没有其它事件需要响应,例如你按了一个键,或者点击了“中止”按钮。只要你在相应的事件里加入了代码,这段代码就可以插在循环的代码之间运行,甚至中止循环。
      

  4.   

    Do While dblEndTime > Timer
         
          DoEvents
       Loop
    好象是个死循环的,用来延时用的,DoEvents把控制权交给系统,以便随时执行其他事件的响应
      

  5.   

    交给系统,等待时间到。
    但这用Timer控件做更好,不然用户可能会再单击Command2(谁知道他会再点几次),不小心就出大问题了。