Delay 方法参考
📋 方法列表
| 方法 | 说明 |
|---|---|
Callback | 设置回调模式(链式调用) |
Sync | 设置同步等待模式(链式调用) |
CountDown | 开始倒计时 |
Cancel | 取消延时 |
🔗 Callback 方法
说明
设置回调模式,延时结束后自动调用指定对象的指定方法。支持最多9个参数。
语法
vb
Public Function Callback(ByVal CallbackObject As Object, ByVal ProcName As String, ParamArray P()) As cDelay参数
| 参数 | 类型 | 说明 |
|---|---|---|
CallbackObject | Object | 回调方法所在的对象 |
ProcName | String | 回调方法名称 |
P() | ParamArray | 可变参数,最多9个 |
返回值
返回自身对象,支持链式调用。
使用示例
无参数回调
vb
Private Delay As cDelay
Private Sub Test1()
Set Delay = New cDelay
Delay.Callback(Me, "DoSomething").CountDown 1000
End Sub
Public Sub DoSomething()
Debug.Print "执行了!"
End Sub带参数回调
vb
Private Sub Test2()
Set Delay = New cDelay
Delay.Callback(Me, "ProcessData", "用户名", 25, True).CountDown 2000
End Sub
Public Sub ProcessData(ByVal name As String, ByVal age As Long, ByVal active As Boolean)
Debug.Print name & ", " & age & ", " & active
End Sub⏱️ Sync 方法
说明
设置同步等待模式,调用 CountDown 后会阻塞等待,但会处理消息队列,不卡UI。
语法
vb
Public Function Sync() As cDelay返回值
返回自身对象,支持链式调用。
使用示例
vb
Private Sub TestSync()
Dim Delay As New cDelay
Debug.Print "开始: " & Now
Delay.Sync().CountDown 3000 ' 等待3秒
Debug.Print "结束: " & Now ' 3秒后执行
End Sub⚠️ 注意事项
- 同步模式下可以通过
Cancel方法取消等待 - 可以通过
IsCancelled属性判断是被取消还是正常完成 - 等待期间会处理消息队列,UI不会卡顿
▶️ CountDown 方法
说明
开始倒计时。根据当前模式决定行为:
- 事件/回调模式:启动Windows定时器
- 同步模式:进入消息循环等待
语法
vb
Public Sub CountDown(ByVal Milliseconds As Long)参数
| 参数 | 类型 | 说明 |
|---|---|---|
Milliseconds | Long | 延时毫秒数 |
使用示例
vb
' 事件模式
Delay.CountDown 5000 ' 5秒后触发 OnTime 事件
' 回调模式(需要先调用Callback)
Delay.Callback(Me, "OnDelay").CountDown 3000
' 同步模式(需要先调用Sync)
Delay.Sync().CountDown 2000❌ Cancel 方法
说明
取消当前的延时操作。停止定时器并触发 OnCancel 事件。
语法
vb
Public Sub Cancel()使用示例
vb
Private WithEvents Delay As cDelay
Private Sub cmdStart_Click()
Set Delay = New cDelay
Delay.CountDown 10000 ' 10秒延时
End Sub
Private Sub cmdCancel_Click()
Delay.Cancel ' 取消延时
End Sub
Private Sub Delay_OnCancel()
Debug.Print "延时被取消"
End Sub📌 使用场景总结
延时执行操作
vb
' 3秒后执行清理
Delay.Callback(Me, "DoCleanup").CountDown 3000延时等待(保持UI响应)
vb
Private Sub LongOperation()
' 第一步
DoStep1
' 等待2秒(UI不卡顿)
Delay.Sync().CountDown 2000
' 第二步
DoStep2
End Sub可取消的延时
vb
Private Sub StartDelayedTask()
Set Delay = New cDelay
Delay.CountDown 5000
End Sub
Private Sub CancelTask()
If Not Delay Is Nothing Then
Delay.Cancel
End If
End Sub
Private Sub Delay_OnTime()
Debug.Print "延时任务执行"
End Sub
Private Sub Delay_OnCancel()
Debug.Print "延时任务被取消"
End Sub最后更新: 2026-05-17