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

Windows-Anforderungen

Gerätefamilie
Windows 10 (eingeführt in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (eingeführt in v1.0)

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

Hinweise

Der DispatcherTimer kann verwendet werden, um Code auf demselben 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. Das Häkchen wird im gleichen Intervall fortgesetzt, bis die Stop-Methode aufgerufen wird, die App beendet oder die App angehalten wird (löst Suspending aus).

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 nicht die gewünschte Granularität bieten. Dies sehen Sie im Beispiel Beschleunigungsmesser.

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

Tipp

Wenn Sie Microsoft Silverlight- oder Windows Presentation Foundation -Code (WPF) migrieren, befanden sich der DispatcherTimer und der zugehörige Dispatcher in einem separaten System.Windows.Threading-Namespace. Es gibt keinen Windows.UI.Xaml.Threading-Namespace im Windows-Runtime, daher befindet sich diese Klasse in Windows.UI.Xaml.

Wenn Sie nichts mit dem UI-Thread in Ihren Tick-Handlern tun und nur einen Timer benötigen, können Sie stattdessen auch ThreadPoolTimer verwenden. Außerdem sind Sie bei Techniken wie ThreadPoolTimer oder einer . NET-Aufgabe nicht vollständig vom UI-Thread isoliert. Sie können dem UI-Thread weiterhin asynchron mit CoreDispatcher.RunAsync zuweisen.

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