2010-07-02 7 views
25

Creo que IsEnabled = false/true es igual con el método Stop/Start de la clase System.Windows.Threading.DispatcherTimer ¿Estoy en lo cierto?¿Cuál es la diferencia entre 'IsEnabled' y 'Start/Stop' de DispatcherTimer?

[EDIT] Inicio(): inicia el temporizador con una cuenta regresiva de intervalo completo. IsEnabled = false: pausa el temporizador, la cuenta atrás del intervalo permanece. IsEnabled = true: reanudar el temporizador & continuar con la última cuenta atrás del intervalo utilizado. Detener(): detener el temporizador, ¿se restablecerá el intervalo de cuenta regresiva?

Respuesta

40

Teniendo en cuenta que Start/Stop activa la propiedad IsEnabled, su presupuesto está cerrado.

Start/Stop difiere como el Interval se pone a cero, en tanto que simplemente conmutando el IsEnabled no restablecerá la Interval.

De MSDN:

Configuración IsEnabled a falso cuando el temporizador se pone en marcha el temporizador se detiene.

El ajuste IsEnabled a verdadero cuando el temporizador se detiene inicia el temporizador.

Start sets IsEnabled to true.

Start reinicia el intervalo del temporizador.

EDIT: Lo que quiero decir por el intervalo de restablecerse no es la misma propiedad intervalo, pero el intervalo de fondo que determina el tiempo hasta el próximo evento garrapata se dispara.

Por ejemplo. Si tiene un intervalo de 1000ms y lo detiene/deshabilita si se ejecutan 250ms (se ejecuta durante 750ms), este es el resultado dependiendo de cómo lo inicie de nuevo.

  • Si se inicia con Start(), entonces el intervalo transcurrido se restablecerá de nuevo a 0 y será 1000ms antes de que se ha producido el evento Tick.
  • Si lo vuelve a habilitar con IsEnabled = true, continuará desde su ubicación actual y el evento Tick aumentará en 250 ms.

Espero que esto lo aclare por usted.

+0

¿Qué ocurre con el intervalo si se reseted? Por el momento, creo que al llamar a Start/Stop, el valor Interval (int) no cambia. –

+0

No es el valor del intervalo en sí, sino el intervalo de fondo. He actualizado mi respuesta para responder esto. –

+0

Gracias! Está bastante claro ahora, excepto lo que sucede cuando llamamos a Stop()? ¿Se restablecerá el intervalo de fondo? –

3

Implementación de DispatcherTimer.IsEnabled

public bool IsEnabled 
    { 
     get 
     { 
      return _isEnabled; 
     } 
     set 
     { 
      lock (_instanceLock) 
      { 
       if (!value && _isEnabled) 
       { 
        Stop(); 
       } 
       else 
       { 
        if (!value || _isEnabled) 
         return; 
        Start(); 
       } 
      } 
     } 
    } 
+0

http://reflector.webtropy.com/default.aspx/DotNET/DotNET/[email protected]/untmp/WIN_WINDOWS/lh_tools_devdiv_wpf/ Windows/wcp/Base/System/Windows/Threading/DispatcherTimer @ cs/1/DispatcherTimer @ cs –

Cuestiones relacionadas