DispatcherTimer Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fornece um temporizador integrado à fila do Dispatcher , que é processado em um intervalo de tempo especificado e em uma prioridade 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
- Herança
- Atributos
Requisitos do Windows
Família de dispositivos |
Windows 10 (introduzida na 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (introduzida na v1.0)
|
Exemplos
Este código de exemplo implementa um temporizador de estilo de console simples que grava dados em um TextBlock chamado TimerLog
(XAML que define TimerLog
não é mostrado). O valor interval é definido como 1 e o log exibe o tempo decorrido real 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 ...
}
Comentários
O DispatcherTimer pode ser usado para executar código no mesmo thread que produz o thread de interface do usuário. O código em execução nesse thread tem o privilégio de criar e modificar objetos que só podem ser criados e modificados no thread da interface do usuário. Para especificar que o código deve ser executado no thread da interface do usuário, defina a propriedade Interval e, em seguida, chame o método Start . O evento Tick é acionado após o tempo especificado em Intervalo ter decorrido. O tick continua disparando no mesmo Intervalo até que o método Stop seja chamado, o aplicativo seja encerrado ou o aplicativo seja suspenso (aciona Suspending).
Um cenário para DispatcherTimer é marcar propriedades em sensores em que as alterações nos valores do sensor não são puramente controladas por eventos ou os eventos não oferecem a granularidade desejada. Você pode ver isso no exemplo de Acelerômetro.
Outros cenários para DispatcherTimer incluem a verificação de alterações de estado que não têm eventos relacionados ou para atualizações periódicas da interface do usuário que não podem usar uma animação com storyboard ou uma associação bidirecional.
Dica
Se você estiver migrando o código do Microsoft Silverlight ou Windows Presentation Foundation (WPF), o DispatcherTimer e o Dispatcher relacionados estavam em um namespace System.Windows.Threading separado. Não há nenhum namespace Windows.UI.Xaml.Threading no Windows Runtime, portanto, essa classe está em Windows.UI.Xaml.
Se você não estiver fazendo nada com o thread da interface do usuário em seus manipuladores tick e apenas precisar de um temporizador, também poderá usar ThreadPoolTimer . Além disso, para técnicas como ThreadPoolTimer ou uma Tarefa .NET, você não está totalmente isolado do thread da interface do usuário. Você ainda pode atribuir ao thread da interface do usuário de forma assíncrona usando CoreDispatcher.RunAsync.
Construtores
DispatcherTimer() |
Inicializa uma nova instância da classe DispatcherTimer . |
Propriedades
Interval |
Obtém ou define a quantidade de tempo entre tiques de temporizador. |
IsEnabled |
Obtém um valor que indica se o temporizador está em execução. |
Métodos
Start() |
Inicia o DispatcherTimer. |
Stop() |
Interrompe o DispatcherTimer. |
Eventos
Tick |
Ocorre quando termina o intervalo do temporizador. |