VB.NET Countdown - Conto Alla Rovescia


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