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
属性

示例

此示例代码实现一个简单的控制台样式计时器,该计时器将数据写入名为 TextBlockTimerLog 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

超过计时器间隔时发生。

适用于

另请参阅