2009-06-18 18 views
28

Supongamos que estamos usando System.Windows.Forms.Timer en una aplicación .Net, ¿Hay alguna diferencia significativa entre el uso los métodos Start() y Stop() en el temporizador, en lugar de usar la propiedad Enabled?Usando System.Windows.Forms.Timer.Start()/Stop() versus Enabled = true/false

Por ejemplo, si deseamos hacer una pausa en un contador de tiempo mientras nosotros hacemos algún tipo de procesamiento, podríamos hacer:

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

o, podríamos hacer:

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

Si no hay una significativa diferencia, ¿hay consenso en la comunidad sobre qué opción elegir?

Respuesta

30

Como se indica por tanto BFree y James, no hay ninguna diferencia en Start\Stop frente Enabled en cuanto a funcionalidad. Sin embargo, la decisión sobre qué utilizar debe basarse en el contexto y sus propias pautas de estilo de codificación. Depende de cómo quiera que un lector de su código interprete lo que ha escrito.

Por ejemplo, si quiere que vean lo que está haciendo como iniciar una operación y detener esa operación, probablemente desee usar Start/Stop. Sin embargo, si desea dar la impresión de que está habilitando la accesibilidad o la funcionalidad de una función, entonces usar Enabled y true/false es un ajuste más natural.

No creo que se requiera consenso para usar uno u otro, realmente tiene que decidir en función de las necesidades de su código y su mantenimiento.

+1

bien así que, básicamente, cuando el valor inicial de la Timer.Enabled es "falsa", y en tiempo de ejecución , Llamé a Start(), el valor Timer.Enabled ahora sería "verdadero" ¿no? lo siento, debería escribir un código simple en su lugar. –

+0

eso es correcto. –

6

No son equivalentes.

Ver Timer.Enabled y Timer.Start/Timer.Stop

Para agregar a su pregunta sobre el consenso, yo diría que es probablemente mejor la práctica de utilizar los métodos Start/Stop y su también mejor para facilitar la lectura, supongo.

James.

5

Personalmente, no me gusta configurar las propiedades para tener demasiadas consecuencias, aparte de cambiar un valor, por lo que tiendo a apegarme al Start()/Stop(), ya que es claro (er) que cuando se invoca un método, estás pidiendo que pase algo

Dicho esto, supongo que no hay una gran cantidad de ambigüedad sobre lo que el establecimiento de Enabled = true se va a hacer :)

+0

No estoy seguro de eso ... hasta que leí la documentación, mi modelo mental era que Start()/Stop() causaba que el temporizador comenzara o dejara de contar, mientras que establecer Enabled gobernaría si los eventos disparaban o no cuando el temporizador transcurrido (esto sería útil en casos en los que es posible que deba evitar temporalmente eventos, pero mantenga el mismo horario para ellos si los volvió a habilitar más adelante). – Jules

+0

@Jules Eso es comprensible, pero incorrecto :) Si configura 'Enabled = true ', el siguiente evento se activará después de' Interval ', no siempre que el próximo disparo hubiera sido si no los hubiera desactivado. –

+0

Sí; mi punto es que esta es una interpretación plausible, por lo que debe evitar la ambigüedad al no usar la propiedad Enabled, en lugar de sugerir que es realmente cierto. :) – Jules

1

No uso timer.Stop() y timer.Start(), porque son submarinos de timer.Enabled. Si desea configurar el temporizador a falso al comienzo de la aplicación (al momento de la carga), debe utilizar timer.Enabled = false, timer.Stop() no funcionará. Es por eso que uso timer.Enabled = false/true.

2

Aquí hay un código simple para probar cómo funcionan Enabled, Start(), Stop() entre sí.

Hacer una prueba de aplicación de Windows Forms, agregue dos botones simples y pega este código dentro de Form1() constructor:

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(); 
};