Dettaglio su oggetto TIMER di windows

lunedì 20 gennaio 2014 - 16.11
Tag Elenco Tags  C#  |  .NET 4.0  |  Windows XP  |  Visual Studio 2010  |  Visual Studio Express

yag Profilo | Junior Member

salve

vorrei sapere se il metodo start del timer riazzera il contatore oppure parte dal conteggio corrente

mi spiego meglio

io voglio che l'evento sia chiamata ogni 10secondi

se per qualsiasi motivo le operazioni eseguite dentro il mio metodo superano i 10secondi io vorrei alla fine delle operazioni far partire immediatamente il nuovo evento e cosi via...

io usavo un pseduo codice del tipo

evento...

timer.stop();

fai tante cose....

timer.Start();

fine evento

ma non sono sicuro che questo faccio al mio caso...

grazie

AntCiar Profilo | Expert

Ciao.

Il timer dovrebbe essere asincrono nel senso che allo scatenarsi dell'evento Tick il conteggio continua ad andare avanti.

Quest fa si che se hai messo un valore di interval che ti fa scatenare ogni 10 secondi, se nell'evento Tick non fermi il timer questo una vosta scatenato l'evento riparte da 0 e riconta i 10 secondi. Se nel frattempo non hai terminato quello che hai messo nell'evento, allora te lo richiama e mette in coda nello stack delle chiamate quello che c'e nell'evento.
Cristian Barca

yag Profilo | Junior Member

Ok quindi ristart il conteggio

come potrei fare per controllare alla chiusura dell'evento se sono passati più
secondo di quelle dell'intervallo ?

cioè se le mie elaborazioni sono durate più di timer.intervall richiamare appunto l'evento in maniera forzata....

è possibile ?

AntCiar Profilo | Expert

Si e' possibile.
Devi solo fare una piccola modifica concettuale.

Imposta il valore Interval del timer a 1000 (ossia 1 secondo)

Dichiarati una variabile globale (o statica in program) di tipo intero che inizializzi a 0
Dichiarati un'altra variabile di tipo booleano che userai come flag per controllare se l'evento e' in corso oppure no e la valorizzi a false

nell'evento Tick del timer incrementi il valore di questa variabile. subito dopo controlli se il valore della variabile e' uguale a 10.
Se è uguale a 10 e il flag è FALSE, allora imposti il flag a true; resetti il valore della variabile a 0 e avvii il tuo metodo complesso.

intanto il timer continua a fare il tick ogni secondo e incrementera' la variabile intera. Anche se questa arriva a 10, troverà il flag a true e quindi non avvierà il metodo complesso ma continuerà a contare.

Nel metodo complesso alla fine di questo controlla il valore valore della variabile intera e se e' maggiore di 10, azzeri la variabile e riavvii il metodo complesso. Solo all'uscita del metodo complesso (ossia quando al termine la variabile intera è minore di 10) imposti a False il tuo flag di controllo.
Cristian Barca

alextyx Profilo | Expert

Se ho ben capito il caso, consiglierei di usare un timer impostato ad un valore non troppo aggressivo, qualcosa tipo qualche centinaio di millisecondi. Il lavoro del timer sarà quello di controllare l'orologio di sistema, controllando se la differenza (timespan) tra questa e un valore date memorizzato al momento dell'ultima chiamata alle procedure previste, supera i 10 secondi. Se si superano, si rivalorizza la variabile per il confronto con l'ora attuale (date.now) e si lanciano le procedure (quelle da fare nell'evento tick, per capirsi). Se necessario, si può impedire, appunto con una variabile booleana, di procedere se non si vuole interrompere un'altra procedura in esecuzione. In questo caso la condizione per lanciare le procedure sarà: timespan>10 AND FlagPossoLanciareProcedure=True
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5