Désactiver une source de commande via une horloge système, exemple
Mise à jour : novembre 2007
Cet exemple montre comment activer et désactiver une source de commande via Windows.System.Timers.Timer.
Windows.System.Timers.Timer s'exécute sur un thread différent de celui de l'interface utilisateur, il faut donc effectuer un travail supplémentaire pour mettre à jour l'interface utilisateur. Une autre manière de résoudre ce problème, dans la plupart des cas c'est même une meilleur solution et plus élégante, est d'utiliser DispatcherTimer. Le travail est plus aisé car DispatcherTimer s'exécute sur le même thread que l'interface utilisateur. Pour plus d'informations, consultez Désactiver une source de commande via DispatcherTimer, exemple. Vous aurez cependant parfois besoin d'utiliser une classe qui ne s'exécute pas sur le thread de l'interface utilisateur, cet exemple vous indique donc comment faire.
Les sources de commandes, telles que les classes MenuItem et Button, écoutent l'événement CanExecuteChanged sur le RoutedCommand auquel elles sont attachées afin de déterminer le moment où elles doivent interroger la commande pour voir si la commande peut s'exécuter sur la cible actuelle de la commande. Les sources de commandes vont généralement se désactiver si la commande ne peut pas s'exécuter et s'activer dans le cas contraire ; par exemple, MenuItem se grise lorsque la commande ne peut pas s'exécuter.
CommandManager notifie RoutedCommand via l'événement RequerySuggested lorsque les conditions de la cible de commande ont changé. RoutedCommand déclenche l'événement CanExecuteChanged, événement qu'écoute la source de commande. Ce mécanisme de notification est généralement approprié, mais, dans certaines situations, CommandManager ne sait pas que des modifications sont intervenues sur la cible de la commande, de sorte que l'événement RequerySuggested n'est jamais déclenché et que la source de la commande n'interroge jamais RoutedCommand. Dans ces cas, CommandManager peut être forcé à déclencher l'événement RequerySuggested en appelant InvalidateRequerySuggested.
Cet exemple crée un objet RoutedCommand qui peut être exécuté uniquement lorsque le nombre de secondes de l'heure actuelle est supérieur à la valeur cible. System.Windows.Timers.Timer est créé et transmet toutes les secondes une tâche au Dispatcher du thread de l'interface utilisateur. Puisque la tâche est planifiée dans le Dispatcher du thread de l'interface utilisateur, le thread de l'interface utilisateur mettra l'interface à jour.
La méthode qui est transmise au Dispatcher appelle InvalidateRequerySuggested. Ceci permet de s'assurer que la source de la commande reçoit l'événement CanExecuteChanged, et donc qu'il appelle la méthode CanExecute sur la commande.
Pour plus d'informations sur l'exécution des commandes, consultez Vue d'ensemble des commandes.
Cet exemple présente une fonctionnalité spécifique de Windows Presentation Foundation et, par conséquent, ne suit pas les meilleures pratiques de développement d'applications. Pour un traitement complet des meilleures pratiques de développement d'applications Windows Presentation Foundation (WPF) et Microsoft .NET Framework, reportez-vous, selon les cas, aux documents suivants :
Accessibilité - Meilleures pratiques d'accessibilité
Sécurité - Sécurité de Windows Presentation Foundation
Localisation - Vue d'ensemble de la globalisation et de la localisation WPF
Génération de l'exemple
Installez le Kit de développement logiciel (SDK) Windows et ouvrez la fenêtre Commande de son environnement de génération. Dans le menu Démarrer, pointez sur Tous les programmes et sur Microsoft Windows SDK, puis cliquez sur CMD Shell.
Téléchargez l'exemple, généralement à partir de la documentation du Kit de développement logiciel (SDK), vers votre disque dur local.
Pour générer l'exemple à partir de la fenêtre Commande de l'environnement de génération, accédez au répertoire source de l'exemple. À l'invite de commandes, tapez MSBUILD.
Pour générer l'exemple dans Microsoft Visual Studio, chargez l'exemple de solution ou de fichier projet, puis appuyez sur CTRL+MAJ+B.
Exécution de l'exemple
Pour exécuter l'exemple compilé à partir de la fenêtre Commande de l'environnement de génération, exécutez le fichier .exe du dossier Bin\Debug ou Bin\Release contenu sous le dossier du code source de l'exemple.
Pour exécuter l'exemple compilé avec le débogage dans Visual Studio, appuyez sur F5.
Voir aussi
Tâches
Désactiver une source de commande via DispatcherTimer, exemple