Questo programma in VB.NET Console ha lo scopo di visualizzare un conto alla rovescia.
Lo script di origine è presente su vbforums.com
La versione che segue è un adattamento alle mie esigenze.
In funzione di un tempo di attesa impostato in minuti il timer avvia il conto alla rovescia.
Module Module1
Private WithEvents CountDownTimer As System.Timers.Timer
Private start_countDownValue As Date
Private countDownValue As Date
Dim differenza As TimeSpan
Dim minuti_attesa As Integer
Sub Main()
' imposto i minuti di attesa
minuti_attesa = 5
' recupero la data e l'ora corrente
start_countDownValue = Now
' aggiungo all'ora corrente i minuti di attesa
countDownValue = DateAdd("n", minuti_attesa, start_countDownValue)
' calcolo la differenza tra le due date e ricavo i minuti in formato corretto
differenza = start_countDownValue.Subtract(countDownValue)
'inizializzo il timer
CountDownTimer = New System.Timers.Timer()
With CountDownTimer
.AutoReset = True
.Interval = 1000
End With
Console.WriteLine("Conto alla rovescia:")
Console.Write(Replace(differenza.ToString, "-", ""))
' inizio il conto alla rovescia
CountDownTimer.Start()
'impedisce la chiusura dell'applicazione
Console.ReadLine()
End Sub
Private Sub CountDownTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles CountDownTimer.Elapsed
'recupero la lunghezza della stringa
Static lastDigitCount As Integer = countDownValue.ToString.Length
' sottraggo un secondo
countDownValue = DateAdd("s", -1, countDownValue)
' ricalcolo la differenza tra la data iniziale e la data attuale con il secondo sottratto
differenza = start_countDownValue.Subtract(countDownValue)
Dim currentDigitCount As Integer = countDownValue.ToString.Length
'Adjustment to character erasing...
If lastDigitCount > currentDigitCount Then
Console.Write(ChrW(8) & ChrW(32) & ChrW(8))
lastDigitCount = currentDigitCount
End If
' se arrivo al termine del conteggio
If differenza.ToString <> "00:00:00" Then
' sostituisco la stringa corrente con la nuova
For i As Integer = 0 To currentDigitCount - 1
Console.Write(ChrW(8) & ChrW(32) & ChrW(8))
Next
Console.Write(Replace(differenza.ToString, "-", ""))
Else
' fine del conto alla rovescia stoppo il timer
CountDownTimer.Stop()
Console.Write(ChrW(8) & ChrW(32) & ChrW(8) & differenza.ToString)
End If
End Sub
End Module
Commenti