Published in: VB.NET
Countdown timer with 100 millisecond precision. Raises event every second.
Imports System.Timers Public Class StopWatch Private WithEvents timer As Timers.Timer 'use system timer Private _StartTime As Date Private _CurrentTime As Date Private _TargetTime As Date Public Delegate Sub ElapsedEventHandler(ByVal sender As System.Object, ByVal e As ElapsedEventArgs) Public Event Elapsed As ElapsedEventHandler Public ReadOnly Property ElapsedTime() As TimeSpan Get Return Me._CurrentTime.Subtract(Me._StartTime) End Get End Property Public ReadOnly Property RemainingTime() As TimeSpan Get If Me._TargetTime = Nothing Then Return Nothing ElseIf TimeSpan.Compare(Me._TargetTime.Subtract(Me._CurrentTime), TimeSpan.Zero) = -1 Then Return TimeSpan.Zero Else Return Me._TargetTime.Subtract(Me._CurrentTime) End If End Get End Property Public Sub SetTargetTime(ByVal mins As Double) Me._TargetTime = Me._StartTime.AddMinutes(mins) End Sub Public Sub New() 'create timer object Me.timer = New Timers.Timer() 'initialise internal timer Me._StartTime = Date.Now Me._CurrentTime = Me._StartTime End Sub Public Sub Start() Me.PrevTime = Now 'initialise timer Me.timer.Start() End Sub Public Sub [Stop]() Me.timer.Stop() End Sub Public Sub Reset() Me.Stop() 'recreate timer object Me.timer = New Timers.Timer() 'initialise internal timer Me._StartTime = Date.Now Me._CurrentTime = Me._StartTime End Sub Private PrevTime As Date 'record real time for diff Private DiffTime As TimeSpan Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As Timers.ElapsedEventArgs) Handles timer.Elapsed 'retrieve time diff from last tick Me.DiffTime = e.SignalTime.Subtract(Me.PrevTime) 'increment internal timer Me._CurrentTime = Me._CurrentTime.Add(Me.DiffTime) 'check reached target time If Not Me._TargetTime = Nothing Then If Me._CurrentTime >= Me._TargetTime Then Me.Stop() End If 'record event time for next tick Me.PrevTime = e.SignalTime 'raise event to main form RaiseEvent Elapsed(sender, New Mafro.ElapsedEventArgs(Me._CurrentTime)) End Sub End Class Public Class ElapsedEventArgs Inherits EventArgs Private _SignalTime As DateTime Public ReadOnly Property SignalTime As DateTime Get Return _SignalTime End Get End Property Friend Sub New(ByVal SignalTime As DateTime) _SignalTime = SignalTime End Sub End Class
You need to login to post a comment.
