Aiuto utilizzo Timer con C#

venerdì 08 febbraio 2008 - 11.08

elyarwen Profilo | Newbie

Buongiorno a tutti!
Dalla mia applicazione utilizzo dei metodi contenuti in una dll devo controllare il valore di una "variabile" boolean che è una proprietà di un oggetto contenuto in questa dll. Questa variabile inizialmente è true ma può cambiare da un momento all'altro e io devo sapere il prima possibile quando diventa false. La cosa più semplice sarebbe questa:
Thread.Sleep(1000);
while (oggetto.proprietà) Thread.Sleep(1000);
però in questo modo l'applicazione rimane intrappolata nel while mentre io vorrei che rimanesse "libera", quindi mi servirebbe una gestione a evento, sarebbe perfetto aggiungere un delegate ma non ho i sorgenti della dll, quindi pensavo lo posso fare con un timer? Cioè impostare un timer di uno o due secondi e finchè il bool è true continuo a richiamare il timer e a controllare il valore.. però non so come si fa a fare in modo che il timer richiami se stesso più volte. Devo farlo nel delegate associato all'evento Elapsed?
Qualcuno l'ha già fatto?

aiedail92 Profilo | Expert

Ciao

Il timer, una volta partito, si "richiama" da solo ogni volta che scade il tempo.

Quindi il "problema" non è farlo ripartire quando il bool è true, ma fermarlo quando il bool è false; ma la cosa è molto semplice:

private void tuoTimer_Tick(object sender, EventArgs e) { if (tuoBool == false) { tuoTimer.Stop(); //Gestisci il cambio di tuoBool } }

Luca

elyarwen Profilo | Newbie

Grazie Luca! Visto che sei stato cosi gentile ne approfitto per un ultima domanda
Se io voglio che il mio timer duri 2 secondi che differenza c'è tra scrivere
Timer mioTimer = new Timer(2000);
oppure
mioTimer.Interval = 2000;

?

aiedail92 Profilo | Expert

prego

Non mi risulta che sia possibile scrivere

Timer mioTimer = new Timer(2000);

In quanto Timer non dovrebbe avere costruttori che accettano un int come parametro, e dovrebbe darti un errore di compilazione; con

mioTimer.Interval = 2000;

invece imposti la proprietà del Timer in modo da generare l'evento ogni 2000 millisecondi.

Luca

elyarwen Profilo | Newbie

Si in realtà ha un costruttore che accetta un double come parametro
Timer.Timer(double interval)
interval: the time in millisecond between events

e non dà errore di compilazione forse perchè in C# se scrivi un double senza decimali lo interpreta come .00.
Boh?
Comunque grazie per le risposte!

aiedail92 Profilo | Expert

Ah ho capito, tu usi il timer nel namespace System.Timers, io ho usato quello nel namespace System.Windows.Forms.

Allora, la differenza è questa: con

Timer mioTimer = new Timer(2000);

crei una nuova istanza del timer e gli associ alla proprietà Interval valore 2000. Questo equivale a scrivere

Timer mioTimer = new Timer(); mioTimer.Interval = 2000;

ed è stato fatto per velocizzare il lavoro; invece con

mioTimer.Interval = 2000;

Imposti su 2000 la proprietà Interval di un timer già inizializzato (se non lo fosse otterresti una NullReferenceException)

Luca

elyarwen Profilo | Newbie

Sì, scusami visto che non utilizzo quasi mai Form avevo dimenticato di precisare che mi stavo riferendo ad un timer del namespace System.Timers.
Grazie per le delucidazioni!

aiedail92 Profilo | Expert

Di niente!

Se non devi chiedere altro accetta una risposta, almeno segnaliamo il thread come risolto

A presto

Luca
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