DispatcherTimer Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
- 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. |