Compartir a través de


DispatcherTimer Clase

Definición

Proporciona un temporizador integrado en la cola dispatcher , que se procesa en un intervalo de tiempo especificado y con una prioridad especificada.

/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DispatcherTimer
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DispatcherTimer
Public Class DispatcherTimer
Herencia
Object IInspectable DispatcherTimer
Atributos

Requisitos de Windows

Familia de dispositivos
Windows 10 (se introdujo en la versión 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (se introdujo en la versión v1.0)

Ejemplos

Este código de ejemplo implementa un temporizador sencillo de estilo de consola que escribe datos en un TextBlock denominado TimerLog (XAML que define TimerLog no se muestra). El valor interval se establece en 1 y el registro muestra el tiempo real transcurrido para cada tick.

DispatcherTimer dispatcherTimer;
DateTimeOffset startTime;
DateTimeOffset lastTime;
DateTimeOffset stopTime;
int timesTicked = 1;
int timesToTick = 10;

public void DispatcherTimerSetup()
{
    dispatcherTimer = new DispatcherTimer();
    dispatcherTimer.Tick += dispatcherTimer_Tick;
    dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
    //IsEnabled defaults to false
    TimerLog.Text += "dispatcherTimer.IsEnabled = " + dispatcherTimer.IsEnabled + "\n";
    startTime = DateTimeOffset.Now;
    lastTime = startTime;
    TimerLog.Text += "Calling dispatcherTimer.Start()\n";
    dispatcherTimer.Start();
    //IsEnabled should now be true after calling start
    TimerLog.Text += "dispatcherTimer.IsEnabled = " + dispatcherTimer.IsEnabled + "\n";
}

void dispatcherTimer_Tick(object sender, object e)
{
    DateTimeOffset time = DateTimeOffset.Now;
    TimeSpan span = time - lastTime;
    lastTime = time;
    //Time since last tick should be very very close to Interval
    TimerLog.Text += timesTicked + "\t time since last tick: " + span.ToString() + "\n";
    timesTicked++;
    if (timesTicked > timesToTick)
    {
        stopTime = time;
        TimerLog.Text += "Calling dispatcherTimer.Stop()\n";
        dispatcherTimer.Stop();
        //IsEnabled should now be false after calling stop
        TimerLog.Text += "dispatcherTimer.IsEnabled = " + dispatcherTimer.IsEnabled + "\n";
        span = stopTime - startTime;
        TimerLog.Text += "Total Time Start-Stop: " + span.ToString() + "\n";
    }
}
private void Page_Loaded_1(object sender, RoutedEventArgs e)
{
    DispatcherTimerSetup();
}
// MainPage.cpp
...
#include <chrono>
...
void MainPage::StartTimerAndRegisterHandler()
{
    Windows::UI::Xaml::DispatcherTimer timer;
    timer.Interval(std::chrono::milliseconds{ 500 });
    auto registrationtoken = timer.Tick({this, &MainPage::OnTick });
    timer.Start();
}

void MainPage::OnTick(Windows::Foundation::IInspectable const& /* sender */,
    Windows::Foundation::IInspectable const& /* e */)
{
    // do something on each tick here ...
}
// .cpp definition, .h not shown
void MainPage::StartTimerAndRegisterHandler() {
    auto timer = ref new Windows::UI::Xaml::DispatcherTimer();
    TimeSpan ts;
    ts.Duration = 500;
    timer->Interval = ts;
    timer->Start();
    auto registrationtoken = timer->Tick += ref new EventHandler<Object^>(this,&MainPage::OnTick);
}
void MainPage::OnTick(Object^ sender, Object^ e) {
    // do something on each tick here ...
}

Comentarios

DispatcherTimer se puede usar para ejecutar código en el mismo subproceso que genera el subproceso de interfaz de usuario. El código que se ejecuta en este subproceso tiene el privilegio de crear y modificar objetos que solo se pueden crear y modificar en el subproceso de la interfaz de usuario. Para especificar que el código se debe ejecutar en el subproceso de la interfaz de usuario, establezca la propiedad Interval y, a continuación, llame al método Start . El evento Tick se activa después de que haya transcurrido el tiempo especificado en Interval . Tick continúa activando en el mismo intervalo hasta que se llama al método Stop , finaliza la aplicación o se suspende la aplicación (activa Suspending).

Un escenario para DispatcherTimer es comprobar las propiedades de los sensores en los que los cambios realizados en los valores del sensor no están exclusivamente controlados por eventos o los eventos no proporcionan la granularidad que desee. Puede verlo en la muestra accelerómetro.

Otros escenarios para DispatcherTimer incluyen la comprobación de cambios de estado que no tienen eventos relacionados o para actualizaciones periódicas de la interfaz de usuario que no pueden usar una animación con guion gráfico o un enlace bidireccional.

Sugerencia

Si va a migrar el código de Microsoft Silverlight o Windows Presentation Foundation (WPF), DispatcherTimer y el distribuidor relacionado se encontraban en un espacio de nombres System.Windows.Threading independiente. No hay ningún espacio de nombres Windows.UI.Xaml.Threading en el Windows Runtime, por lo que esta clase está en Windows.UI.Xaml.

Si no está haciendo nada con el subproceso de interfaz de usuario en los controladores tick y solo necesita un temporizador, también puede usar ThreadPoolTimer en su lugar. Además, para técnicas como ThreadPoolTimer o una tarea de .NET, no está totalmente aislado del subproceso de la interfaz de usuario. Todavía se puede asignar al subproceso de interfaz de usuario de forma asincrónica mediante CoreDispatcher.RunAsync.

Constructores

DispatcherTimer()

Inicializa una nueva instancia de la clase DispatcherTimer .

Propiedades

Interval

Obtiene o establece la cantidad de tiempo entre tics del temporizador.

IsEnabled

Obtiene un valor que indica si se está ejecutando el temporizador.

Métodos

Start()

Inicia DispatcherTimer.

Stop()

Detiene DispatcherTimer.

Eventos

Tick

Se produce cuando ha transcurrido el intervalo del temporizador.

Se aplica a

Consulte también