DispatcherTimer Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit un minuteur intégré à la file d’attente dispatcher , qui est traitée à un intervalle de temps spécifié et à une priorité spécifiée.
/// [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
- Héritage
- Attributs
Configuration requise pour Windows
Famille d’appareils |
Windows 10 (introduit dans 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (introduit dans v1.0)
|
Exemples
Cet exemple de code implémente un minuteur de style console simple qui écrit des données dans un TextBlock nommé TimerLog
(XAML qui définit TimerLog
n’est pas affiché). La valeur Interval est définie sur 1 et le journal affiche le temps écoulé réel pour chaque 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 ...
}
Remarques
DispatcherTimer peut être utilisé pour exécuter du code sur le thread qui produit le thread d’interface utilisateur. Le code s’exécutant sur ce thread a le privilège de créer et de modifier des objets qui ne peuvent être créés et modifiés que sur le thread d’interface utilisateur. Pour spécifier que le code doit s’exécuter sur le thread d’interface utilisateur, définissez la propriété Interval , puis appelez la méthode Start . L’événement Tick se déclenche une fois que le temps spécifié dans Interval est écoulé. La case continue de se déclencher au même intervalle jusqu’à ce que la méthode Stop soit appelée, que l’application se termine ou que l’application soit suspendue (déclenche la suspension).
Un scénario pour DispatcherTimer consiste à case activée propriétés sur les capteurs où les modifications apportées aux valeurs des capteurs ne sont pas purement basées sur les événements, ou les événements ne vous donnent pas la granularité souhaitée. Vous pouvez le voir dans l’exemple Accéléromètre.
D’autres scénarios pour DispatcherTimer incluent la vérification des changements d’état qui n’ont pas d’événements associés ou des mises à jour périodiques de l’interface utilisateur qui ne peuvent pas utiliser une animation storyboard ou une liaison bidirectionnelle.
Conseil
Si vous migrez du code Microsoft Silverlight ou Windows Presentation Foundation (WPF), dispatcherTimer et dispatcher associé se trouvait dans un espace de noms System.Windows.Threading distinct. Il n’y a pas d’espace de noms Windows.UI.Xaml.Threading dans le Windows Runtime. Cette classe se trouve donc dans Windows.UI.Xaml.
Si vous ne faites rien avec le thread d’interface utilisateur dans vos gestionnaires Tick et que vous avez simplement besoin d’un minuteur, vous pouvez également utiliser ThreadPoolTimer à la place. En outre, pour des techniques telles que ThreadPoolTimer ou une tâche .NET, vous n’êtes pas totalement isolé du thread d’interface utilisateur. Vous pouvez toujours affecter au thread d’interface utilisateur de manière asynchrone à l’aide de CoreDispatcher.RunAsync.
Constructeurs
DispatcherTimer() |
Initialise une nouvelle instance de la classe DispatcherTimer. |
Propriétés
Interval |
Obtient ou définit la durée entre les cycles du minuteur. |
IsEnabled |
Obtient une valeur qui indique si le minuteur est en cours d’exécution. |
Méthodes
Start() |
Démarre DispatcherTimer. |
Stop() |
Arrête dispatcherTimer. |
Événements
Tick |
Se produit lorsque l'intervalle de la minuterie s'est écoulé. |