DispatcherTimer 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供集成到 Dispatcher 队列中的计时器,该队列按指定的时间间隔和指定的优先级进行处理。
/// [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
- 继承
- 属性
Windows 要求
设备系列 |
Windows 10 (在 10.0.10240.0 中引入)
|
API contract |
Windows.Foundation.UniversalApiContract (在 v1.0 中引入)
|
示例
此示例代码实现一个简单的控制台样式计时器,该计时器将数据写入名为“ (XAML”的 TimerLog
TextBlock,该 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 ...
}
// .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 ...
}
注解
DispatcherTimer 可用于在生成 UI 线程的同一线程上运行代码。 在此线程上运行的代码有权创建和修改只能在 UI 线程上创建和修改的对象。 若要指定代码应在 UI 线程上运行,请设置 Interval 属性,然后调用 Start 方法。 Tick 事件在间隔中指定的时间过后触发。 Tick 继续以相同的 间隔 触发,直到调用 Stop 方法、应用终止或应用暂停 (触发 Suspending) 。
DispatcherTimer 的一种方案是在传感器上检查属性,其中传感器值更改不是纯粹由事件驱动的,或者事件没有提供所需的粒度。 可以在 加速计示例中看到这一点。
DispatcherTimer 的其他方案包括检查没有相关事件的状态更改,或者检查无法使用情节提要动画或双向绑定的定期 UI 更新。
提示
如果要迁移 Microsoft Silverlight 或Windows Presentation Foundation (WPF) 代码,则 DispatcherTimer 和相关 Dispatcher 位于单独的 System.Windows.Threading 命名空间中。 Windows 运行时中没有 Windows.UI.Xaml.Threading 命名空间,因此此类位于 Windows.UI.Xaml 中。
如果不对 Tick 处理程序中的 UI 线程执行任何操作,并且只需要计时器,也可以改用 ThreadPoolTimer 。 此外,对于 ThreadPoolTimer 或 .NET 任务等技术,并不完全与 UI 线程隔离。 你仍然可以使用 CoreDispatcher.RunAsync 以异步方式分配给 UI 线程。
构造函数
DispatcherTimer() |
初始化 DispatcherTimer 类的新实例。 |
属性
Interval |
获取或设置计时器计时周期之间的时间。 |
IsEnabled |
获取一个值,该值指示计时器是否正在运行。 |
方法
Start() |
启动 DispatcherTimer。 |
Stop() |
停止 DispatcherTimer。 |
事件
Tick |
超过计时器间隔时发生。 |