[Risolto] Azioni a meno 10 minuti dalla fine di un Timer

di Anonimizzato17918 il
6 risposte
Salve ragazzi,
ho un programmino c# (fatto con Visual Studio 2015) con un timer.

Al termine del timer (2 ore) fa delle cose.. e le fa, quindi OK.

Adesso volevo provare ad inserire una icona nelle notifiche che prima che scada il tempo (diciamo 10 minuti prima) mi faccia vedere un balloon con un messaggio ("mancano 10 minuti ..").

Cosa rapida: inserisco un altro timer che parte in contemporanea col primo, ma che dura 10 minuti meno.. ma così non ho imparato nulla..

Oppure?
Ho cercato in rete ma non mi viene in mente nulla..

Grazie

6 Risposte

  • Mi pare abbastanza semplice:
    tu hai un'orario di avvio e la durata (2 ore)
    leggi l'orario corrente (all'interno del Timer) e lo confronti con quello di avvio.
    Quando mancano 10 minuti mostri il popup.

  • Quindi non c'è modo di leggere direttamente il timer?
    tipo se il timer di chiama timer1
    int tempoMancante= timer1.Convertitore;
    if (tempoMancante == 600000)
    {
         //mostra popup;
    }
    Grazie
  • Cosa vuol dire:
    Quindi non c'è modo di leggere direttamente il timer?
    Spiegati cosa intendi...
  • gibra ha scritto:


    Cosa vuol dire:
    Quindi non c'è modo di leggere direttamente il timer?
    Spiegati cosa intendi...
    Quello che ho fatto:
    Allora ho trascinato sul form un Timer, e in automatico Visula Studio lo chiama timer1
    Imposto il tempo a 2h(7200000) e Enable su false.
    Alla pressione di un Button, tra le varie cose abiliti timer1 (una cosa del tipo):
    timer1.Enabled=true;

    Quello che voglio fare:
    Adesso vorrei sapere quanto vale timer1, cioè quanti secondi sono passati e metterli in una variabile, possibilmente int. In questo modo posso mettere da qualche parte un codice che dice pressapoco così:

    "Se timer1 == n secondi (se sono passati 1h:50min) fammi vedere un balloon nella area delle notifiche", cioè:
    if (valore_di_timer1 == 6600000) 
    {
    NotifyIcon1.ShowBalloonTip(...)
    }
    Il pezzo che mi manca è appunto come leggere direttamente timer1.. quindi una cosa tipo:
    valore_di_timer1 = timer1.???
    Spero di essere stato un pò più chiaro..

    Grazie
  • Imposto il tempo a 2h(7200000)
    Per tempo intendi la proprietà Interval ?
    Se sì, perché lo imposti a 7200000 (2 ore)?
    In questo modo che il codice dell'evento Tick nel Timer sarà eseguito OGNI 2 ore, quindi non potrai mai controllare prima quanti minuti mancano.

    Invece di 2 ore dovresti impostare un multiplo in base a quando vuoi fare il controllo, es. ogni 10 minuti.
    - Crei una variabile a livello di form
    - la incrementi nel Tick del Timer
    - calcoli il tempo trascorso e se è quello che vuoi tu mostri il popup.

    Ad esempio, mettiamo che ho un timer impostato a Interval = 6000 (ogni secondo) e dopo 30 secondi voglio mostrare un messaggio e fermare il Timer. Una cosa del genere:
        
           static int conta = 1;
    
           private void timer1_Tick(object sender, EventArgs e)
            {
                conta += 1;
                if (conta == 30)
                    {
                    MessageBox.Show("Sono passati 30 secondi.");  
                    timer1.Stop();
                    }
            }
    
    Ti suggerisco di usare i metodi Start() e Stop() per avviare/fermare il Timer.
    E ricorda sempre di fermarlo prima di scaricare il form.

  • gibra ha scritto:


    Imposto il tempo a 2h(7200000)
    Ti suggerisco di usare i metodi Start() e Stop() per avviare/fermare il Timer.
    E ricorda sempre di fermarlo prima di scaricare il form.
    Grazie della risposta..

    Leggendo in rete ho visto che il metodo start()/stop() sono uguali a enabled=true/false.. confermi o cambia qualcosa? (io uso timer1.enabled=true per farlo partire, e timer1.Stop() per fermarlo.. così non faccio torto a nessuno )

    Così intendi quando dici di "scaricare il form".. quando lo chiudo? In realtà il mio programma è fisso e non si deve/può chiudere.. deve restare sempre aperto..
Devi accedere o registrarti per scrivere nel forum
6 risposte