Quote Originariamente inviata da Gime76 Visualizza il messaggio
Ho un problema con il funzionamento del Timer su VB6. [...]
Sia il codice sia la problematica è un pochino farraginosa per esaminarla nel dettaglio.

Quello che si può dire riguardo il Timer è fare attenzione al fatto che questo linguaggio - ma l'uso del Timer in generale - non supporta una esecuzione "asincrona".

Mi spiego: abilitare e disabilitare il timer serve solo a dire a Windows di mandare (o non mandare più) il messaggio relativo al "tick". La temporizzazione è relativa all'invio del messaggio, ma se ad esempio si imposta un tick ogni 6 secondi e la procedura ne impiega 10 a ultimare il suo compito, i messaggi relativi ai tick dopo 6 secondi arrivano, ma verranno gestiti tutti assieme dopo il termine dell'evento che ha richiesto i 10 secondi.

In definitiva, c'è una coda: quando il timer è abilitato, ogni X secondi arriva un messaggio in coda per scatenare il timer. Se il programma è impegnato a "fare cose", legate o meno al timer, i messaggi si accumulano e quando l'operazione corrente terminerà il suo compito, il programma gestirà tutti i messaggi giunti fino a quel momento che sono in coda.

Questo per dire che temporizzare col Timer non è una buona idea: è meglio usare un Timer più stringente, lasciare il suo evento libero da cose bloccanti (tipo una MsgBox, ad esempio) e verificare il tempo trascorso usando una sottrazione tra l'orario attuale e l'intervallo considerato, in breve cambiare la logica da "faccio cose ogni X tempo" al "controllo ogni X tempo, e faccio cose solo se è trascorso Y".

Ciao!