VBMAN.Delay - 延迟执行对象
概述
VBMAN.Delay 提供了延迟执行和异步回调功能,可以在指定时间后执行代码,避免阻塞主线程,适用于需要延时操作的场景。
核心特性
- 非阻塞延迟: 不会冻结界面
- 回调支持: 支持对象方法回调
- 可取消: 可以取消待执行的延迟任务
- 链式调用: 流畅的 API 设计
方法
Callback
设置回调对象和方法
vb
Public Function Callback(ByVal obj As Object, ByVal methodName As String) As cDelay参数:
obj- 回调对象methodName- 要调用的方法名
示例:
vb
' 设置回调
VBMAN.Delay.Callback Me, "DelayedMethod"CountDown
开始倒计时(毫秒)
vb
Public Function CountDown(ByVal milliseconds As Long) As cDelay示例:
vb
' 2秒后执行
VBMAN.Delay.Callback(Me, "ShowMessage").CountDown 2000
' 5秒后执行
VBMAN.Delay.Callback(Me, "AutoSave").CountDown 5000综合示例
示例1: 延迟显示消息
vb
' 在窗体模块中
Public Sub ShowDelayedMessage()
VBMAN.Delay.Callback Me, "ShowWelcome"
VBMAN.Delay.CountDown 1000
End Sub
Public Sub ShowWelcome()
MsgBox "欢迎使用本系统!"
End Sub
' 使用
Private Sub Form_Load()
ShowDelayedMessage
End Sub示例2: 异步显示主窗体(来自 cs-auther 案例)
vb
' 异步显示主窗体的原因:
' 因为 bUser.Info 在 TCP 接收处理器内部执行,而 fLogin 也监听了 TCP 事件。
' 如果直接在 Info 中 Unload fLogin,会引发事件重入冲突。
' 因此使用 VBMAN.Delay.Callback(Me, "ShowMainForm").CountDown 2000 延迟 2 秒后异步执行。
Public Sub ShowMainForm()
fLogin.Hide
Form1.Show
End Sub
' 在登录成功后调用
Private Sub LoginSuccess()
VBMAN.Delay.Callback(Me, "ShowMainForm").CountDown 2000
End Sub示例3: 自动保存功能
vb
Private Sub TextEditor_Change()
' 内容改变后,3秒后自动保存
VBMAN.Delay.Callback(Me, "AutoSave").CountDown 3000
End Sub
Public Sub AutoSave()
' 保存文件
SaveFile TextEditor.Text, CurrentFilePath
VBMAN.Toast.Show "已自动保存", 1000
End Sub示例4: 重试机制
vb
Private retryCount As Integer
Private Sub ConnectToServer()
If Not TryConnect() Then
retryCount = retryCount + 1
If retryCount <= 3 Then
VBMAN.Toast.Show "连接失败," & retryCount & "秒后重试...", 2000
VBMAN.Delay.Callback(Me, "ConnectToServer").CountDown retryCount * 1000
Else
MsgBox "连接失败,请检查网络设置"
End If
End If
End Sub示例5: 延时关闭
vb
Private Sub ShutdownWithDelay()
VBMAN.Toast.Show "系统将在5秒后关闭", 5000
VBMAN.Delay.Callback(Me, "DoShutdown").CountDown 5000
End Sub
Public Sub DoShutdown()
' 执行清理操作
Cleanup
' 关闭程序
Unload Me
End Sub最佳实践
- 避免循环调用: 注意防止无限递归的延时调用
- 对象生命周期: 确保回调对象在延时执行时仍然存在
- 线程安全: 在多线程环境中使用时注意线程安全
- 错误处理: 回调方法中添加错误处理
- 适时取消: 如果不再需要延时执行,及时取消