Public Class Form1
Dim myNewTimer As New MyTimer
Dim CheckTime As DateTime
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
AddHandler myNewTimer.Tick, AddressOf myTickHandler
With myNewTimer
.Interval = 10000
.Enabled = True
End With
CheckTime = Now
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
CheckTime = Now
myNewTimer.IntervalOverrider = 20000
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
CheckTime = Now
myNewTimer.IntervalOverrider = 5000
End Sub
Private Sub myTickHandler(sender As System.Object, e As System.EventArgs)
Dim TS As New TimeSpan
TS = Now.Subtract(CheckTime)
TextBox1.Text += TS.Seconds.ToString & vbCrLf
CheckTime = Now
End Sub
End Class
Public Class MyTimer
Inherits Timer
Private Const OneSec As Integer = 1000
Private WithEvents TickTimer As New Timer
Private Property ElapsedTicks As Integer
Private _IntervalOverrider As Integer
Public Sub New()
With TickTimer
.Interval = OneSec
End With
End Sub
Public Property IntervalOverrider As Integer
Get
Return _IntervalOverrider
End Get
Set(value As Integer)
_IntervalOverrider = value
If Not _IntervalOverrider = MyBase.Interval Then
If _IntervalOverrider > MyBase.Interval Then
MyBase.Interval = _IntervalOverrider - ElapsedTicks
Else
MyBase.OnTick(New System.EventArgs)
MyBase.Interval = _IntervalOverrider
End If
End If
End Set
End Property
Public Overrides Property Enabled As Boolean
Get
Return MyBase.Enabled
End Get
Set(value As Boolean)
MyBase.Enabled = value
TickTimer.Enabled = value
End Set
End Property
Private Sub CheckForChangedElapsedTime() Handles MyBase.Tick
ElapsedTicks = 0
If IntervalOverrider > 0 AndAlso Not IntervalOverrider = MyBase.Interval Then
MyBase.Interval = IntervalOverrider
End If
End Sub
Private Sub TickTimer_Tick(sender As System.Object, e As System.EventArgs) Handles TickTimer.Tick
ElapsedTicks += OneSec
End Sub
End Class