Partager via


DispatcherTimer Classe

Définition

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
Object IInspectable DispatcherTimer
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é.

S’applique à

Voir aussi