个人认为这个问题有点深度。
代码如下:
Timer1.Enabled = True
Timer1.Interval = 300Private Sub Timer1_Timer()
  Debug.Print "x"
  Do
    DoEvents
    '其它代码(可能需要花一些时间)
  Loop
End Sub实际结果是:Debug只显示一个x,然后程序永远陷入DoEvents循环。
希望的效果是,DoEvents循环时,还能再发生Timer()事件,执行Debug.Print "x"。请教实现思路。

解决方案 »

  1.   

    把DoEvents换为exit sub 不就得了?
      

  2.   


    沙发兄,拜托,事情还没处理完(可能需要一点时间)呢,就Exit Sub???????
      

  3.   

    在 VB 中好象不行。你只要用的是 Timer ,这就跟‘思路’无关 .............
      

  4.   


    Timer1.Enabled = True 
    Timer1.Interval = 300 Private Sub Timer1_Timer() 
      Timer1.Enabled = false
      Debug.Print "x" 
      Do 
        DoEvents 
        '其它代码(可能需要花一些时间) 
      Loop 
      Timer1.Enabled = True 
    End Sub 
      

  5.   


    Timer1.Enabled = True 
    Timer1.Interval = 300 Private Sub Timer1_Timer() 
      Timer1.Enabled = false
      Do 
        Debug.Print "x"      '要一直打印就写到循环里...
        DoEvents 
        '其它代码(可能需要花一些时间) 
      Loop 
      Timer1.Enabled = True 
    End Sub 
      

  6.   

    沙发兄,DoEvents这里还有别的代码需要处理,不能Exit Sub。
      

  7.   


    Debug.Print 只是用来指示Timer()事件发生了,重要的在“其它代码(可能需要花一些时间)”,我是希望在前一次Timer()事件代码处理完成之前,不影响下一次Timer()的触发。
      

  8.   

    开始do循环时关闭定时器,do循环完毕关闭定时器....不就行了,难道你要的是多线程?
      

  9.   

    上面错了,改下:
    我也知道debug.print只是测试用,我的代码关键是开始do循环时关闭定时器,do循环完毕重新打开定时器,不就行了...难道你要的是多线程?
      

  10.   

    timer事件尚未处理完想再开始同一个,不可能。
    LZ思路想复杂了
      

  11.   


    当开始DoEvents循环时,Timer()事件就不会再次发生了,不需要我Timer1.Enabled = False。而且这也不是我想要的。我希望在DoEvents循环时,Timer1继续Enabled,继续能发生Timer()事件,还能执行到Debug.Print等代码。10楼的兄弟说了,此路不通,本帖无解。