DispatcherTimer Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
- 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. |