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(Microsoft.UI.Xaml.WinUIContract, 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(Microsoft.UI.Xaml.WinUIContract), 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
Ejemplos
Este código de ejemplo implementa un temporizador de estilo de consola simple 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 tic.
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 ...
}
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 debe ejecutarse en el subproceso de interfaz de usuario, establezca la propiedad Interval y, a continuación, llame al método Start . El evento Tick se desencadena una vez transcurrido el tiempo especificado en Interval
.
Tick
continúa activando al mismo Interval
hasta que se llama al método Stop , finaliza la aplicación o se suspende la aplicación.
Un escenario para DispatcherTimer
es comprobar las propiedades de los sensores en los que los cambios en los valores del sensor no están exclusivamente controlados por eventos o los eventos no proporcionan la granularidad que desee. Puede verlo en el ejemplo accelerómetro.
Otros escenarios para DispatcherTimer
incluir 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.
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 el temporizador se está ejecutando. |
Métodos
Start() |
Inicia DispatcherTimer. |
Stop() |
Detiene DispatcherTimer. |
Eventos
Tick |
Se produce cuando ha transcurrido el intervalo del temporizador. |