DispatcherTimer クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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
- 継承
- 属性
Windows の要件
デバイス ファミリ |
Windows 10 (10.0.10240.0 で導入)
|
API contract |
Windows.Foundation.UniversalApiContract (v1.0 で導入)
|
例
このコード例では、 という名前TimerLog
の TextBlock にデータを書き込む単純なコンソール スタイルのタイマーを実装します (定義する 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 |
タイマー間隔が経過すると発生します。 |