VB6轮询与计时器事件



我的应用程序的外部进程每个都轮询一个布尔值,看看是否有工作要做。我现在想在Timer事件中检查该变量,以减少"未响应"消息。

Timer对象必须放置在窗体上,这似乎会造成一些限制。

从具有Me.Show(vbModal(的表单启动活动非常有效。只是我不想实际显示那个表格,我只想使用计时器。尝试使用Me.Hide隐藏表单会丢失我需要的模态行为,所以这不是一个好的解决方法。

我尝试从类中启动事件,但它表现出与Me.Hide相同的不需要的行为:处理返回给调用者,而不是停留在计时器事件子中等待工作。

是否有任何方法可以实现基于Timer的事件,该事件不需要显示表单,也不会立即返回给调用者外部进程没有屏幕IO,也不需要。

您可以从Windows API中研究使用SetTimer函数。在模块和用户TimerStart中添加以下代码,间隔以毫秒为单位:

Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Function TimerStart(ByVal p_lngInterval As Long) As Long

' Start timer
TimerStart = SetTimer(0, 0, p_lngInterval, AddressOf TimerCallBack)
End Function
Public Sub TimerCallBack(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)

' Handle your polling here
End Sub

你不需要表格,所以这应该适合你的需要。

您也可以使用Windows API的睡眠与定时器一起保持EXE运行:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Sub Main()
TimerStart 2000

Do While True
DoEvents
Sleep 1000
Loop

End Sub

有关更多详细信息,请参阅以下其他答案:

  • 如何在VBA中制作安全的API计时器
  • 如何延迟Visual Basic(VB6(中的代码执行

相关内容

  • 没有找到相关文章

最新更新