Condividi tramite


DispatcherTimer Classe

Definizione

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à
Object IInspectable DispatcherTimer
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.

Si applica a

Vedi anche