DispatcherTimer Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Fornisce un timer integrato nella coda dispatcher , che viene elaborato a un intervallo di tempo specificato e a una priorità specificata.
/// [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
- Ereditarietà
- Attributi
Requisiti Windows
Famiglia di dispositivi |
Windows 10 (è stato introdotto in 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (è stato introdotto in v1.0)
|
Esempio
Questo codice di esempio implementa un semplice timer in stile console che scrive i dati in un textBlock denominato TimerLog
(XAML che definisce TimerLog
non viene visualizzato). Il valore Interval è impostato su 1 e il log visualizza il tempo trascorso effettivo per ogni 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 ...
}
Commenti
DispatcherTimer può essere usato per eseguire il codice nello stesso thread che produce il thread dell'interfaccia utente. Il codice in esecuzione in questo thread ha il privilegio di creare e modificare oggetti che possono essere creati e modificati solo nel thread dell'interfaccia utente. Per specificare che il codice deve essere eseguito nel thread dell'interfaccia utente, impostare la proprietà Interval e quindi chiamare il metodo Start . L'evento Tick viene generato dopo che è trascorso il tempo specificato in Interval . Il segno di graduazione continua a essere attivato allo stesso intervallo fino a quando non viene chiamato il metodo Stop , l'app termina o l'app viene sospesa (viene attivata la sospensione).
Uno scenario per DispatcherTimer consiste nel controllare le proprietà nei sensori in cui le modifiche ai valori del sensore non sono puramente basate su eventi o gli eventi non offrono la granularità desiderata. È possibile vederlo nell'esempio di Accelerometro.
Altri scenari per DispatcherTimer includono il controllo delle modifiche dello stato che non hanno eventi correlati o per gli aggiornamenti periodici dell'interfaccia utente che non possono usare un'animazione con storyboard o un'associazione bidirezionale.
Suggerimento
Se si esegue la migrazione di codice Microsoft Silverlight o Windows Presentation Foundation (WPF), DispatcherTimer e dispatcher correlato si trovavano in uno spazio dei nomi System.Windows.Threading separato. Non esiste alcuno spazio dei nomi Windows.UI.Xaml.Threading nel Windows Runtime, quindi questa classe si trova in Windows.UI.Xaml.
Se non si esegue alcuna operazione con il thread dell'interfaccia utente nei gestori tick e basta un timer, è anche possibile usare ThreadPoolTimer . Inoltre, per tecniche come ThreadPoolTimer o un'attività .NET, non si è completamente isolati dal thread dell'interfaccia utente. È comunque possibile assegnare al thread dell'interfaccia utente in modo asincrono usando CoreDispatcher.RunAsync.
Costruttori
DispatcherTimer() |
Inizializza una nuova istanza della classe DispatcherTimer . |
Proprietà
Interval |
Ottiene o imposta la quantità di tempo tra i tick del timer. |
IsEnabled |
Ottiene un valore che indica se il timer è in esecuzione. |
Metodi
Start() |
Avvia DispatcherTimer. |
Stop() |
Arresta DispatcherTimer. |
Eventi
Tick |
Si verifica al termine dell'intervallo del timer. |