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

このコード例では、TimerLogという名前の TextBlock にデータを書き込む単純なコンソール スタイルのタイマーを実装します (TimerLogを定義する XAML は表示されません)。 Interval 値は 1 に設定され、ログには各ティックの実際の経過時間が表示されます。

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 Stop メソッドが呼び出されるか、アプリが終了するか、アプリが中断されるまで、同じIntervalで起動を続けます。

DispatcherTimerの 1 つのシナリオは、センサーの値に対する変更が純粋なイベント ドリブンではない場合、またはイベントによって必要な粒度が得られないセンサーのプロパティを確認することです。 これは 、加速度計のサンプルで確認できます。

DispatcherTimerのその他のシナリオとしては、関連するイベントがない状態変更の確認や、ストーリーボードに設定されたアニメーションや双方向バインディングを使用できない定期的な UI 更新のチェックなどがあります。

コンストラクター

名前 説明
DispatcherTimer()

DispatcherTimer クラスの新しいインスタンスを初期化します。

プロパティ

名前 説明
Interval

タイマー ティック間の時間を取得または設定します。

IsEnabled

タイマーが実行されているかどうかを示す値を取得します。

メソッド

名前 説明
Start()

DispatcherTimer を開始します。

Stop()

DispatcherTimer を停止します。

イベント

名前 説明
Tick

タイマー間隔が経過したときに発生します。

適用対象

こちらもご覧ください