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

このコード例では、 という名前TimerLogTextBlock にデータを書き込む単純なコンソール スタイルのタイマーを実装します (定義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発生します。 TickStop メソッドが呼び出されるか、アプリが終了するか、アプリが中断されるまで、同じInterval状態で起動を続けます。

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

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

コンストラクター

DispatcherTimer()

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

プロパティ

Interval

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

IsEnabled

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

メソッド

Start()

DispatcherTimer を開始します。

Stop()

DispatcherTimer を停止します。

イベント

Tick

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

適用対象

こちらもご覧ください