DoEvents应用

来源:互联网 发布:如何用字符串表示json 编辑:程序博客网 时间:2024/05/01 12:02
转让控制权,以便让操作系统处理其它的事件。
  DoEvents 函数会返回一个 Integer,以代表 Visual Basic 独立版本中打开的窗体数目,例如,Visual Basic,专业版,在其它的应用程序中,DoEvents 返回 0。
  DoEvents 会将控制权传给操作系统。当操作系统处理完队列中的事件,并且在 SendKeys 队列中的所有键也都已送出之后,返回控制权。
  DoEvents 对于简化诸如允许用户取消一个已启动的过程 — 例如搜寻一个文件 — 特别有用。对于长时间过程,放弃控制权最好使用定时器或通过委派任务给 ActiveX EXE 部件来完成。以后,任务还是完全独立于应用程序,多任务及时间片由操作系统来处理。
  小心 确保以 DoEvents 放弃控制权的过程,在第一次 DoEvents 返回之前,不能再次被其他部分的代码调用;否则会产生不可预料的结果。此外,如果其它的应用程序可能会和本过程以不可预知的方式进行交互操作,那么也不要使用 DoEvents,因为此时不能放弃控制权。
  使用 DoEvents
  尽管 Timer 事件是后台处理的最好工具,对耗时极多的任务,情况更是如此,但是,DoEvents 函数还是提供了一种取消任务的简便方法。例如,下列代码将显示一个 "Process" 按钮,单击这个按钮时,它将变成 "Cancel" 按钮。再次单击按钮又将中断正在执行的任务。
  ´此按钮标题是 "Process"
  Private Sub Command1_Click()
  ´过程的所有实例都共享静态变量。
  Static blnProcessing As Boolean
  Dim lngCt As Long
  Dim intYieldCt As Integer
  Dim dblDummy As Double
  ´按下按钮时,检测是否在处理
  If blnProcessing Then
  ´如果正在处理,则取消
  blnProcessing = False
  Else
  Command1.Caption = "Cancel"
  blnProcessing = True
  lngCt = 0
  ´执行一百万次浮点乘法计算。每一千次后,检测是否要取消。
  Do While blnProcessing And (lngCt < 1000000)
  For intYieldCt = 1 To 1000
  lngCt = lngCt + 1
  dblDummy = lngCt * 3.14159
  Next intYieldCt
  ´DoEvents 语句允许其它事件发生,包括第二次按此按钮。
  DoEvents
  Loop
  blnProcessing = False
  Command1.Caption = "Process"
  MsgBox lngCt & " multiplications were performed"
  End If
  End Sub
0 0