Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [VB.NET] Problema con timer: non viene eseguito l'evento

    Ciao, ho un prooblema con un timer che deve interrompere una funzione di download in caso il server non risponda per un determinato tempo (es. 10 secondi)
    Ho inserito il controllo Timer1, di default è disabilitato e come intervallo ho impostato appunto 10000 (10 secondi).
    Il timer viene attivato appena inizia il download e ho testato che venga attivato correttamente tramite MagBox(Timer1.Enabled), e in effetti mi restituisce true.
    Ho provato poi a fare in modo che si verificasse l'evento del timer (ho chiuso la connessione ad internet) ma le istruzioni contenute nel timer non sono state eseguite.
    A questo punto ho verificato l'esecuzione del codice riga per riga in modalità debug e ho notato che l'evento Timer1_Tick non viene neanche richiamato al passare del tempo preimpostato.
    Ho fatto anche una ricerca all'interno del codice del form per verificare se per errore il timer veniva disabilitato da un altra parte ma non ho trovato niente!
    Il timer viene attivato all'interno della procedura asincrona che effettua il download (BackgroundWorker1_DoWork) spero che il problema non dipenda da questo...
    http://www.firesoftweb.it - Servizi gratuiti per il tuo sito web: forum, guestbook, contatori visite...

  2. #2
    Utente di HTML.it L'avatar di Mychy
    Registrato dal
    Oct 2000
    Messaggi
    794
    Hai messo
    nometimer.start()
    quando vuoi far partire il timer?

  3. #3
    Sinceramente non avevo mai usato timer.start, comunque non funziona lo stesso...
    La cosa strana è che nel form c'è anche un altro timer, e questo funziona senza problemi...
    http://www.firesoftweb.it - Servizi gratuiti per il tuo sito web: forum, guestbook, contatori visite...

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Io onestamente mi sono perso nei meandri del problema...

    Qual è il compito del Timer in questo contesto? Quale funzione dovrebbe svolgere esattamente?
    Solo per verificare che il Timer sia lo strumento più adatto al compito...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    La mia applicazione deve connettersi ad un database mysql remoto per scaricare dei dati, normalmente è un operazione che viene eseguita in pochissimi secondi, ma ho notato che con connessioni lente, e in momenti in cui il database è in uso da molte altri utenti i tempi di accesso possono essere abbastanza lunghi.
    L'applicazione ovviamente rimane in pausa fino a quando i dati non vengono aggiornati completamente.
    Il timer dovrebbe verificare che non passi troppo tempo per connettersi al database (perchè si sa, gli utenti finali spesso si spazientiscono ad attendere) e se ciò dovesse succedere il timer interromperebbe lo scaricamento dei dati comunicando all'utente che se vuole può provvedere all'aggiornamento manualmente in un secondo momento.
    In altre parole è un normale controllo che genera un timeout in caso passi troppo tempo.
    Purtroppo nonostante io imposti timer1.enabled = true prima di iniziare la procedura di scaricamento, il timer non reagisce, non viene neanche chiamato l'evento timer1_tick.
    Non credo che ci siano altri modi per fare una cosa simile
    http://www.firesoftweb.it - Servizi gratuiti per il tuo sito web: forum, guestbook, contatori visite...

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Più che un timer, a mio avviso si dovrebbe usare un thread esterno per implementare la connessione, ricercando nelle classi utilizzate per l'accesso ai dati metodi analoghi che siano in grado di eseguire in modo asincrono, in modo che sia sempre possibile annullare l'operazione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Si, l'operazione di download è già stata resa asincrona con il controllo BackgroundWorker, infatti all'interno del timer avrei poi usato l'istruzione BackgroundWorker1.CancelAsync() per interrompere l'operazione, ma il timer non viene richiamato!!!!
    http://www.firesoftweb.it - Servizi gratuiti per il tuo sito web: forum, guestbook, contatori visite...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.