DispatcherTimer Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Fornisce un timer integrato nella coda Dispatcher , elaborato a un intervallo di tempo specificato e a una priorità specificata.
/// [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
- Ereditarietà
- Attributi
Esempio
Questo codice di esempio implementa un semplice timer in stile console che scrive i dati in un oggetto TextBlock denominato TimerLog
(XAML che definisce TimerLog
non viene visualizzato). Il valore Intervallo è impostato su 1 e il log visualizza il tempo effettivo trascorso per ogni 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 ...
}
Commenti
Può DispatcherTimer
essere usato per eseguire il codice nello stesso thread che produce il thread dell'interfaccia utente. Il codice in esecuzione in questo thread ha il privilegio di creare e modificare oggetti che possono essere creati e modificati solo nel thread dell'interfaccia utente. Per specificare che il codice deve essere eseguito nel thread dell'interfaccia utente, impostare la proprietà Interval e quindi chiamare il metodo Start . L'evento Tick viene generato dopo l'ora specificata in Interval
è trascorsa.
Tick
continua a essere attivata contemporaneamente Interval
fino a quando il metodo Stop viene chiamato, l'app termina o l'app viene sospesa.
Uno scenario per DispatcherTimer
è controllare le proprietà nei sensori in cui le modifiche ai valori del sensore non sono puramente basate su eventi o gli eventi non offrono la granularità desiderata. Questo è possibile vedere nell'esempio Accelerometro.
Altri scenari per DispatcherTimer
includere il controllo delle modifiche allo stato che non hanno eventi correlati o per gli aggiornamenti periodici dell'interfaccia utente che non possono usare un'animazione storyboard o un'associazione bidirezionale.
Costruttori
DispatcherTimer() |
Inizializza una nuova istanza della classe DispatcherTimer . |
Proprietà
Interval |
Ottiene o imposta la quantità di tempo tra i tick timer. |
IsEnabled |
Ottiene un valore che indica se il timer è in esecuzione. |
Metodi
Start() |
Avvia DispatcherTimer. |
Stop() |
Arresta dispatcherTimer. |
Eventi
Tick |
Si verifica al termine dell'intervallo del timer. |