DispatcherTimer クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ディスパッチャー キューに統合されるタイマーを提供します。このタイマーは、指定した間隔と指定した優先度で処理されます。
/// [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
- 継承
- 属性
例
このコード例では、 という名前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 |
タイマー間隔が経過すると発生します。 |