Ho visto online che ci sono tonnellate di esempi differenti su come creare un timer in Python.

Ma quello che mi serviva a me era un semplice countdown, al termine del quale eseguire una determinata operazione.

Usando il modulo Time, è molto semplice creare un timer in Ruby.

Probabilmente ci sono altri modi, ma questo è abbastanza semplice e pulito.

Mi sono trovare ad affrontare una questione: quella di dover impostare un autologout dopo un tot di tempo (20 minuti).

Basando il logi su sessioni, avrei potuto diminuire il tempo di sessione; solo che mi rimaneva scomodo, in quanto su alcuni programmi dovevo imspotare questo autologout.

Come fare?

Una soluzione ce la da Javascript usando un timeout.

Tempo fa vi parlai di come creare un countdown in C#.

In quel caso usammo un Windows Form e un controllo Timer.

Adesso invece vediamo come usare la classe Timer dentro a un progetto console.

In pratica il mio programma svolge determinate operazioni, alla fine delle quali deve aspettare 5 secondi prima di chiudere la finestra di terminale.

Oggi vedremo come creare un piccolo cpuntdown con C# e Windows Form.

Create una nuova applcazione Windows Form.
Nella finestra dovete mettere come minimo questi elementi:

  • una TextBox per impostare le ore
  • una TextBox per impostare i minuti
  • una TextBox per impostare i secondi
  • un Button per lo start
  • un Button per la pausa
  • un Button per lo stop
  • una Label per lo scorrere delle ore
  • una Label per lo scorrere dei minuti
  • una Label per lo scorrere dei secondi
  • un oggetto Timer che trovate nel gurppo Componenti; quando lo aggiungete verrà visualizzato nella barra in fondo alla finestra del designer

Inoltre, per fare le cose più carine, i tasti di stop e pausa all'inizio sono disabilitati.

Di volta in volta abiliteremo/disabiliteremo solo i pulsanti che ci servono.

A questo punto nel codice del form pirma di tutto aggiungiamo 4 variabili private:

private int seconds = 0;
private int minutes = 0;
private int hours = 0;
private bool paused;

Penso che non abbiano bisogno di molte spiegazioni.

Poi abbiamo bisogni di un metodo per ogni bottone più uno per controllare l'oggetto Timer.

Cominciamo col metodo del pulsante start:

private void btnStart_Click(object sender, EventArgs e)
        {
            if (paused != true)
            {
                if (txtHr.Text != String.Empty || txtMn.Text != String.Empty || txtSn.Text != String.Empty)
                {
                    try
                    {
                        if (txtHr.Text != String.Empty)
                        {
                            hours = Convert.ToInt32(txtHr.Text);
                        }
                        if (txtMn.Text != String.Empty)
                        {
                            minutes = Convert.ToInt32(txtMn.Text);
                        }
                        if (txtSn.Text != String.Empty)
                        {
                            seconds = Convert.ToInt32(txtSn.Text);
                        }
                        btnStart.Enabled = false;
                        btnPause.Enabled = true;
                        btnStop.Enabled = true;
                        cdTimer.Enabled = true;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
                else
                {
                    MessageBox.Show("Inserire almeno un valore");
                }
            }
            else
            {
                cdTimer.Enabled = true;
                paused = false;
                btnStart.Enabled = false;
                btnPause.Enabled = true;
                btnStop.Enabled = true;
            }
        }

Prima controlliamo se lo stato del Timer è in pausa.

Poi controlliamo che almeno una delle TextBox sia valorizzata.

Se tutto va bene valoriaziamo le variabili int private con i valori delle TextBox e abilitiamo il Timer (cdTimer).