次の方法で共有


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

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

イベント

Tick

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

適用対象

こちらもご覧ください