Поделиться через


DispatcherTimer Класс

Определение

Предоставляет таймер, интегрированный в очередь диспетчера , которая обрабатывается с заданным интервалом времени и с заданным приоритетом.

/// [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
Наследование
Object IInspectable DispatcherTimer
Атрибуты

Примеры

В этом примере кода реализуется простой таймер в стиле консоли, который записывает данные в TextBlock с именем TimerLog (xaml, определяющий TimerLog , не отображается). Для параметра Interval задано значение 1, а в журнале отображается фактическое затраченное время для каждого элемента 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 ...
}

Комментарии

Можно DispatcherTimer использовать для выполнения кода в том же потоке, который создает поток пользовательского интерфейса. Код, выполняющийся в этом потоке, имеет право создавать и изменять объекты, которые можно создавать и изменять только в потоке пользовательского интерфейса. Чтобы указать, что код должен выполняться в потоке пользовательского интерфейса, задайте свойство Interval и вызовите метод Start . Событие Tick срабатывает по истечении времени, указанного в Interval . Tick продолжает выполняться Interval до тех пор, пока не будет вызван метод Stop , приложение не завершит работу или приложение не будет приостановлено.

Одним из сценариев является DispatcherTimer проверка свойств на датчиках, где изменения значений датчика не управляются исключительно событиями или события не дают нужной детализации. Это можно увидеть в примере акселерометра.

Другие сценарии включают DispatcherTimer проверку изменений состояния, в которых нет связанных событий, или для периодических обновлений пользовательского интерфейса, которые не могут использовать раскадровки анимации или двусторонней привязки.

Конструкторы

DispatcherTimer()

Инициализирует новый экземпляр класса DispatcherTimer .

Свойства

Interval

Возвращает или задает интервал времени между тактами таймера.

IsEnabled

Возвращает значение, указывающее, запущен ли таймер.

Методы

Start()

Запускает DispatcherTimer.

Stop()

Останавливает DispatcherTimer.

События

Tick

Происходит по истечении интервала таймера.

Применяется к

См. также раздел