DispatcherTimer クラス

定義

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
継承
Object IInspectable DispatcherTimer
属性

Windows の要件

デバイス ファミリ
Windows 10 (10.0.10240.0 で導入)
API contract
Windows.Foundation.UniversalApiContract (v1.0 で導入)

このコード例では、名前付きの TimerLogTextBlock にデータを書き込む単純なコンソール スタイルのタイマーを実装しています (定義TimerLogする XAML は表示されません)。 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 イベントは、Interval で指定された時間が経過した後に発生します。 Tick は、Stop メソッドが呼び出されるか、アプリが終了するか、アプリが中断 (中断中) になるまで、同じ間隔で起動続けます。

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

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 を停止します。

events

Tick

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

適用対象

こちらもご覧ください