我有一个棘手的问题(至少对我来说)。我正在开发一个用 VB.net 编写的 Windows 服务。我正在使用 System.Timers.Timer 类定期调用委托方法以查看是否有任何工作要做。处理的时间并不重要,我试图通过在调用方法后立即禁用 Timer 并在最后重新启动它来防止重新进入工作方法。
但是,Timer 类 Elapsed 事件发生在不同的线程上。在网上搜索,大多数人都在使用实现 ISynchronize 接口的 Windows 窗体来编组对原始线程的调用。理想情况下,我不想使用 Windows 窗体来实现这一点。有没有一种简单的方法可以将调用重定向回原始线程?
或者是否有一个我可以继承的框架类来做到这一点?或者最坏的情况是 ISynchronize 的简单实现?
Imports System.Timers
Imports System.IO
Imports System.Data
Public Class Application
Implements IDisposable
Private WithEvents _Timer As Timer
Private Sub SleepTimerCallback(sender As Object, e As ElapsedEventArgs) Handles _Timer.Elapsed
' TODO need to find a way to bring this method back on the main thread.
' Temporarily disable the timer elapsed event so that we don't have event re-entrance.
If Me._Timer.Enabled = True Then Me._Timer.Enabled = False
' Do Work.
' Re-enable the timer elapsed event.
_Timer.Enabled = True
End Sub
End Class