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
- Наследование
- Атрибуты
Примеры
В этом примере кода реализуется простой таймер в стиле консоли, который записывает данные в 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 |
Происходит по истечении интервала таймера. |