sp;Dim intClickNumber As Integer
Dim dblEndTime As Double
''每次单击按钮时
''赋予唯一数值。
intClick = intClick + 1
intClickNumber = intClick
''等待十秒。
dblEndTime = Timer + 10#
Do While dblEndTime > Timer
''不做任何事情,仅仅允许
''其它应用
程序处理
''它们的事件。
DoEvents
Loop
MsgBox "Click " & intClickNumber & " is finished"
End Sub
对于通过 DoEvents 放弃控制的事件过程,有时可能希望防止在 DoEvents 返回之前重新调用这一过程。否则将无穷无尽地调用该过程,直到系统资源消耗殆尽。可暂时禁止控件,或象上例一样,使用一个静态的“标志”变量防止此事发生。
在使用全局数据时避免 DoEvents
当一个函数已通过 DoEvents 放弃控制时,可相当安全地再次调用函数。例如,下一过程将检测质数并用 DoEvents 语句周期地启动其它应用
程序处理事件:
Function PrimeStatus (TestVal As Long) As Integer
Dim Lim As Integer
PrimeStatus = True
Lim = Sqr(TestVal)
For I = 2 To Lim
If TestVal Mod I = 0 Then
PrimeStatus = False
Exit For
End If
If I Mod 200 = 0 Then DoEvents
Next I
End Function
该代码中每重复 200 次就调用一次 DoEvents 语句。这样一来,当该环境的其余部分对事件作出响应时,只要有必要,PrimeStatus 过程就可继续计算。
考虑在调用 DoEvents 期间发生的事情。在其它窗体和应用程序处理事件时将暂停执行应用
程序代码。这些事件之一有可能是一个按钮单击操作,它将再次启动 PrimeStatus 过程。
这将导致重新进入 PrimeStatus 过程的,但是,因为在函数每次出现时,堆栈都为其参数和局部变量分配了空间,所以重入不会引发冲突。当然,如果过多调用 PrimeStatus,则可能出现“溢出堆栈空间”错误。
如果 PrimeStatus 使用或改变模块级变量或全局数据,情况就会完全不同。此时,在 DoEvents 能够返回之前执行 PrimeStatus 的另一个实例,这将导致模块数据或全局数据的值完全不同于它们在调用 DoEvents 之前的值。于是,PrimeStatus 的结果将会难以预料。
以上代码来自: 源代码数据库(SourceDataBase)
当前版本: 1.0.392
作者: Shawls
个人主页: Http://Shawls.Yeah.Net
E-Mail: ShawFile@163.Net
QQ: 9181729