Bagikan melalui


DispatcherTimer Kelas

Definisi

Menyediakan timer yang diintegrasikan ke dalam antrean Dispatcher, yang diproses pada interval waktu tertentu dan pada prioritas tertentu.

/// [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
Warisan
Object IInspectable DispatcherTimer
Atribut

Persyaratan Windows

Rangkaian perangkat
Windows 10 (diperkenalkan dalam 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (diperkenalkan dalam v1.0)

Contoh

Contoh kode ini mengimplementasikan timer gaya konsol sederhana yang menulis data ke TextBlock bernama TimerLog (XAML yang mendefinisikan TimerLog tidak ditampilkan). Nilai Interval diatur ke 1, dan log menampilkan waktu aktual yang berlalu untuk setiap 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 ...
}

Keterangan

DispatcherTimer dapat digunakan untuk menjalankan kode pada utas yang sama yang menghasilkan utas UI. Kode yang berjalan pada utas ini memiliki hak istimewa untuk membuat dan memodifikasi objek yang hanya dapat dibuat dan dimodifikasi pada utas UI. Untuk menentukan bahwa kode harus berjalan pada utas UI, atur properti Interval lalu panggil metode Mulai . Peristiwa Tick diaktifkan setelah waktu yang ditentukan dalam Interval telah berlalu. Tick terus menembak pada Interval yang sama sampai metode Stop dipanggil, aplikasi dihentikan, atau aplikasi ditangguhkan ( fires Suspending).

Salah satu skenario untuk DispatcherTimer adalah memeriksa properti pada sensor di mana perubahan pada nilai sensor tidak murni didorong oleh peristiwa, atau peristiwa tidak memberi Anda granularitas yang Anda inginkan. Anda dapat melihat ini dalam sampel Akselerometer.

Skenario lain untuk DispatcherTimer termasuk memeriksa perubahan status yang tidak memiliki peristiwa terkait, atau untuk pembaruan antarmuka pengguna berkala yang tidak dapat menggunakan animasi papan cerita atau pengikatan dua arah.

Tip

Jika Anda memigrasikan kode Microsoft Silverlight atau Windows Presentation Foundation (WPF), DispatcherTimer dan Dispatcher terkait berada di namespace Layanan System.Windows.Threading terpisah. Tidak ada namespace Windows.UI.Xaml.Threading di Windows Runtime, jadi kelas ini ada di Windows.UI.Xaml.

Jika Anda tidak melakukan apa pun dengan utas UI di handler Tick Anda dan hanya memerlukan timer, Anda juga dapat menggunakan ThreadPoolTimer sebagai gantinya. Selain itu, untuk teknik seperti ThreadPoolTimer atau .NET Task, Anda tidak sepenuhnya terisolasi dari utas UI. Anda masih dapat menetapkan ke utas UI secara asinkron menggunakan CoreDispatcher.RunAsync.

Konstruktor

DispatcherTimer()

Menginisialisasi instans baru kelas DispatcherTimer .

Properti

Interval

Mendapatkan atau mengatur jumlah waktu antara tanda waktu.

IsEnabled

Mendapatkan nilai yang menunjukkan apakah timer sedang berjalan.

Metode

Start()

Memulai DispatcherTimer.

Stop()

Menghentikan DispatcherTimer.

Acara

Tick

Terjadi ketika interval timer telah berlalu.

Berlaku untuk

Lihat juga