2009-06-18 12 views
28

Supponiamo di utilizzare System.Windows.Forms.Timer in un'applicazione .Net, Esiste una differenza significativa tra l'utilizzo i metodi Start() e Stop() sul timer, rispetto all'uso della proprietà Enabled?Utilizzo di System.Windows.Forms.Timer.Start()/Stop() rispetto a Enabled = true/false

Per esempio, se vogliamo mettere in pausa un timer mentre noi facciamo un po 'di elaborazione, potremmo fare:

myTimer.Stop(); 
// Do something interesting here. 
myTimer.Start(); 

o, potremmo fare:

myTimer.Enabled = false; 
// Do something interesting here. 
myTimer.Enabled = true; 

Se non v'è alcuna significativa differenza, c'è un consenso nella comunità su quale opzione scegliere?

risposta

30

Come affermato da entrambi BFree e James, non v'è alcuna differenza di Start\Stop contro Enabled per quanto riguarda la funzionalità. Tuttavia, la decisione su quale utilizzare dovrebbe essere basata sul contesto e le linee guida sullo stile di codifica. Dipende da come vuoi che un lettore del tuo codice interpreti ciò che hai scritto.

Ad esempio, se si desidera che vedano cosa si sta facendo all'avvio di un'operazione e all'arresto di tale operazione, probabilmente si desidera utilizzare Start/Stop. Tuttavia, se si vuole dare l'impressione che si sta abilitando l'accessibilità o la funzionalità di una funzione, utilizzare Enabled e true/false è una scelta più naturale.

Non credo che un consenso è richiesto il solo utilizzando uno o l'altro, si hanno veramente a decidere in base alle esigenze del codice e la sua manutenzione.

+1

ok così fondamentalmente quando il valore iniziale del Timer.Enabled è "false", e in fase di esecuzione , Ho chiamato Start(), il valore Timer.Enabled ora sarebbe "vero" giusto? scusa dovrei scrivere un semplice codice invece. –

+0

è corretto. –

6

No, sono eachothers equivalenti.

Vedi Timer.Enabled e Timer.Start/Timer.Stop

Per aggiungere alla tua domanda circa il consenso, vorrei dire la sua pratica probabilmente meglio utilizzare i metodi Start/Stop e la sua anche meglio per la leggibilità suppongo.

James.

5

Personalmente, non mi piace l'impostazione delle proprietà di avere troppa conseguenza altro che cambiare un valore, quindi tendo a bastone per la Start()/Stop() come è chiaro (er) a me che quando si invoca un metodo, stai chiedendo che accada qualcosa.

Detto questo, non credo che ci sia un sacco di ambiguità su quale impostazione Enabled = true sta per fare :)

+0

Non ne sono sicuro ... fino a quando ho letto la documentazione, il mio modello mentale era che Start()/Stop() ha causato l'avvio o l'interruzione del conteggio del timer, mentre l'impostazione Enabled avrebbe determinato o meno gli eventi attivati ​​quando il timer trascorso (questo sarebbe utile nei casi in cui potrebbe essere necessario impedire temporaneamente gli eventi, ma mantenere la stessa pianificazione per loro se li hai riabilitati in seguito). – Jules

+0

@Jules Questo è comprensibile, ma sbagliato :) Se imposti 'Enabled = true', l'evento successivo si attiva dopo" Intervallo ", non ogni volta che il prossimo si attiva se non li hai disabilitati. –

+0

Sì; il mio punto è che questa è un'interpretazione plausibile, quindi dovresti evitare l'ambiguità non usando la proprietà Enabled, piuttosto che suggerire che sia effettivamente vera. :) – Jules

1

Non faccio uso di timer.Stop() e timer.Start(), perché sono sottomarini di timer.Enabled. Se si desidera impostare il timer su false all'inizio dell'applicazione (al caricamento), è necessario utilizzare timer.Enabled = false, timer.Stop() non funzionerà. Questo è il motivo per cui io uso timer.Enabled = false/true.

2

Ecco un semplice codice per verificare come Enabled, Start(), Stop() funzionano tra loro.

Effettuare un test di Windows sotto forma di app, aggiungere due semplici pulsanti e incollare questo codice all'interno Form1() costruttore:

int c = 0; 
Timer tmr1 = new Timer() 
{ 
    Interval = 100, 
    Enabled= false 
}; 
tmr1.Tick += delegate 
{ 
    c++; 
}; 

// used to continously monitor the values of "c" and tmr1.Enabled 
Timer tmr2 = new Timer() 
{ 
    Interval = 100, 
    Enabled = true 
}; 
tmr2.Tick += delegate 
{ 
    this.Text = string.Format("c={0}, tmr1.Enabled={1}", c, tmr1.Enabled.ToString()); 
}; 

button1.Click += delegate 
{ 
    tmr1.Start(); 
}; 
button2.Click += delegate 
{ 
    tmr1.Stop(); 
}; 
Problemi correlati