DispatcherTimer 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供集成到 调度程序 队列中的计时器,该队列按指定的时间间隔和指定的优先级进行处理。
/// [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
TextBlock (XAML 中,该 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
可用于在生成 UI 线程的同一线程上运行代码。 在此线程上运行的代码具有创建和修改只能在 UI 线程上创建和修改的对象的权限。 若要指定代码应在 UI 线程上运行,请设置 Interval 属性,然后调用 Start 方法。
Tick 事件在 中指定的Interval
时间过后触发。
Tick
继续在同一 Interval
位置触发,直到调用 Stop 方法、应用终止或应用暂停。
的一种方案DispatcherTimer
是在传感器上检查属性,其中对传感器值的更改不是纯事件驱动的,或者事件不提供所需的粒度。 可以在 加速计示例中看到这一点。
的其他方案 DispatcherTimer
包括检查没有相关事件的状态更改,或者检查无法使用情节提要动画或双向绑定的定期 UI 更新。
构造函数
DispatcherTimer() |
初始化 DispatcherTimer 类的新实例。 |
属性
Interval |
获取或设置计时器时钟周期之间的时间量。 |
IsEnabled |
获取一个值,该值指示计时器是否正在运行。 |
方法
Start() |
启动 DispatcherTimer。 |
Stop() |
停止 DispatcherTimer。 |
事件
Tick |
超过计时器间隔时发生。 |