Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Основные API
Узнайте, как создать рабочий элемент, повторяющийся периодически.
Создание периодического рабочего элемента
Используйте метод CreatePeriodicTimer для создания периодического рабочего элемента. Укажите лямбда-файл, который выполняет работу, и используйте параметр периода, чтобы указать интервал между отправками. Этот период задается с помощью структуры TimeSpan . Рабочий элемент будет повторно отправляться каждый раз, когда истекает период, поэтому убедитесь, что период достаточно длинный для завершения работы.
CreateTimer возвращает объект ThreadPoolTimer . Сохраните этот объект в случае отмены таймера.
Заметка Не указывайте значение нуля (или любое значение меньше одного миллисекунда) для интервала. Это приводит к тому, что периодический таймер вместо этого будет вести себя как одноразовый таймер.
Примечание Можно использовать CoreDispatcher.RunAsync для доступа к пользовательскому интерфейсу и отображения хода выполнения из рабочего элемента.
В следующем примере создается рабочий элемент, который выполняется каждые 60 секунд:
TimeSpan period = TimeSpan.FromSeconds(60);
ThreadPoolTimer PeriodicTimer = ThreadPoolTimer.CreatePeriodicTimer((source) =>
{
//
// TODO: Work
//
//
// Update the UI thread by using the UI core dispatcher.
//
Dispatcher.RunAsync(CoreDispatcherPriority.High,
() =>
{
//
// UI components can be accessed within this scope.
//
});
}, period);
TimeSpan period;
period.Duration = 60 * 10000000; // 10,000,000 ticks per second
ThreadPoolTimer ^ PeriodicTimer = ThreadPoolTimer::CreatePeriodicTimer(
ref new TimerElapsedHandler([this](ThreadPoolTimer^ source)
{
//
// TODO: Work
//
//
// Update the UI thread by using the UI core dispatcher.
//
Dispatcher->RunAsync(CoreDispatcherPriority::High,
ref new DispatchedHandler([this]()
{
//
// UI components can be accessed within this scope.
//
}));
}), period);
Обработка отмены выполнения периодического рабочего задания (необязательно)
При необходимости можно обрабатывать отмену периодического таймера с помощью TimerDestroyedHandler. Используйте перегрузку CreatePeriodicTimer для предоставления дополнительной лямбда-функции, которая обрабатывает отмену периодической задачи.
В следующем примере создается периодический рабочий элемент, повторяющийся каждые 60 секунд, а также предоставляется обработчик отмены.
using Windows.System.Threading;
TimeSpan period = TimeSpan.FromSeconds(60);
ThreadPoolTimer PeriodicTimer = ThreadPoolTimer.CreatePeriodicTimer((source) =>
{
//
// TODO: Work
//
//
// Update the UI thread by using the UI core dispatcher.
//
Dispatcher.RunAsync(CoreDispatcherPriority.High,
() =>
{
//
// UI components can be accessed within this scope.
//
});
},
period,
(source) =>
{
//
// TODO: Handle periodic timer cancellation.
//
//
// Update the UI thread by using the UI core dispatcher.
//
Dispatcher->RunAsync(CoreDispatcherPriority.High,
()=>
{
//
// UI components can be accessed within this scope.
//
// Periodic timer cancelled.
}));
});
using namespace Windows::System::Threading;
using namespace Windows::UI::Core;
TimeSpan period;
period.Duration = 60 * 10000000; // 10,000,000 ticks per second
ThreadPoolTimer ^ PeriodicTimer = ThreadPoolTimer::CreatePeriodicTimer(
ref new TimerElapsedHandler([this](ThreadPoolTimer^ source)
{
//
// TODO: Work
//
//
// Update the UI thread by using the UI core dispatcher.
//
Dispatcher->RunAsync(CoreDispatcherPriority::High,
ref new DispatchedHandler([this]()
{
//
// UI components can be accessed within this scope.
//
}));
}),
period,
ref new TimerDestroyedHandler([&](ThreadPoolTimer ^ source)
{
//
// TODO: Handle periodic timer cancellation.
//
Dispatcher->RunAsync(CoreDispatcherPriority::High,
ref new DispatchedHandler([&]()
{
//
// UI components can be accessed within this scope.
//
// Periodic timer cancelled.
}));
}));
Отмена таймера
При необходимости вызовите метод Cancel для остановки периодического повторяющегося рабочего элемента. Если рабочий элемент выполняется при отмене периодического таймера, его можно завершить. По завершении всех экземпляров периодического рабочего элемента вызывается TimerDestroyedHandler (если указано).
PeriodicTimer.Cancel();
PeriodicTimer->Cancel();
Замечания
Сведения об однопользовательских таймерах см. в разделе "Использование таймера для отправки рабочего элемента".