DispatcherTimer Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
- 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. |