Freigeben über


DispatcherTimer Klasse

Definition

Stellt einen Timer bereit, der in die Dispatcher-Warteschlange integriert ist, die zu einem angegebenen Zeitintervall und zu einer angegebenen Priorität verarbeitet wird.

/// [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
Vererbung
Object IInspectable DispatcherTimer
Attribute

Beispiele

Dieser Beispielcode implementiert einen einfachen Timer im Konsolenstil, der Daten in einen TextBlock mit dem Namen schreibt TimerLog (XAML, das definiert TimerLog wird, wird nicht angezeigt). Der Wert Intervall ist auf 1 festgelegt, und das Protokoll zeigt die tatsächliche verstrichene Zeit für jeden Tick an.

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 ...
}

Hinweise

Der DispatcherTimer kann verwendet werden, um Code im selben Thread auszuführen, der den UI-Thread erzeugt. Code, der in diesem Thread ausgeführt wird, hat die Berechtigung, Objekte zu erstellen und zu ändern, die nur im UI-Thread erstellt und geändert werden können. Um anzugeben, dass Code im UI-Thread ausgeführt werden soll, legen Sie die Interval-Eigenschaft fest, und rufen Sie dann die Start-Methode auf. Das Tick-Ereignis wird ausgelöst, nachdem die in Interval angegebene Zeit abgelaufen ist. Tick wird weiterhin gleichzeitig Interval ausgelöst, bis die Stop-Methode aufgerufen wird, die App beendet oder die App angehalten wird.

Ein Szenario für DispatcherTimer besteht darin, Eigenschaften auf Sensoren zu überprüfen, bei denen Änderungen an den Sensorwerten nicht rein ereignisgesteuert sind oder die Ereignisse ihnen nicht die gewünschte Granularität bieten. Dies sehen Sie im Beispiel Beschleunigungsmesser.

Andere Szenarien für DispatcherTimer die Überprüfung auf Zustandsänderungen ohne zugehörige Ereignisse oder für regelmäßige Ui-Updates, die keine Storyboardanimation oder eine bidirektionale Bindung verwenden können.

Konstruktoren

DispatcherTimer()

Initialisiert eine neue instance der DispatcherTimer-Klasse.

Eigenschaften

Interval

Ruft die Zeitspanne zwischen Timer-Ticks ab oder legt sie fest.

IsEnabled

Ruft einen Wert ab, der angibt, ob der Timer ausgeführt wird.

Methoden

Start()

Startet den DispatcherTimer.

Stop()

Beendet den DispatcherTimer.

Ereignisse

Tick

Tritt auf, wenn das Zeitgeberintervall verstrichen ist.

Gilt für:

Weitere Informationen