Ejemplo Disable Command Source via System Timer

Actualización: noviembre 2007

Este ejemplo muestra cómo habilitar y deshabilitar el origen de un comando a través de Windows.System.Timers.Timer.

Windows.System.Timers.Timer se ejecuta en un subproceso independiente del subproceso de la interfaz de usuario; por tanto, se necesitan trabajo adicional para actualizar la interfaz de usuario. Otra manera de resolver este problema, y en la mayoría de los casos una forma mejor y más elegante, es usar DispatcherTimer. Es más fácil porque DispatcherTimer se ejecuta en el mismo subproceso que el subproceso de la interfaz de usuario. Para obtener información, vea el ejemplo Ejemplo Disable Command Source via Dispatcher Timer. Sin embargo, hay casos en los que puede que deba usar una clase que no se ejecute en el subproceso de la interfaz de usuario y este ejemplo muestra cómo lograrlo.

Los orígenes del comando, como las clases MenuItem y Button, escuchan el evento CanExecuteChanged de RoutedCommand al que están asociadas para determinar cuándo deben consultar el comando con el fin de ver si éste se puede ejecutar en el destino del comando actual. Se suelen deshabilitar los orígenes del comando si no se puede ejecutar el comando y, de lo contrario, se habilitan, como cuando se atenúa un MenuItem porque no se puede ejecutar el comando.

CommandManager notifica a RoutedCommand a través del evento RequerySuggested que han cambiado las condiciones con el destino del comando. RoutedCommand provoca el evento CanExecuteChanged al que escucha el origen del comando. Normalmente, este mecanismo de notificación es correcto, pero hay algunos casos en los que CommandManager no se da cuenta que han cambiado las condiciones en el destino del comando y, de esta forma, nunca se provoca el evento RequerySuggested y el origen del comando no consulta nunca RoutedCommand. En estos casos, se puede forzar CommandManager para que provoque el evento RequerySuggested llamando a InvalidateRequerySuggested.

Este ejemplo crea un RoutedCommand que sólo se puede ejecutar cuando los segundos del período de tiempo actual sobrepasan un valor de destino. System.Windows.Timers.Timer se crea para insertar un trabajo de Dispatcher del subproceso de la interfaz de usuario cada segundo. Puesto que este trabajo se programa en Dispatcher del subproceso de la interfaz de usuario, este subproceso actualizará la interfaz de usuario.

El método que se inserta en Dispatcher llama a InvalidateRequerySuggested. De esta forma, se garantiza que el origen del comando reciba el evento CanExecuteChanged para que pueda llamar al método CanExecute del comando.

Para obtener más información sobre los comandos, vea Información general sobre comandos.

En este ejemplo, se muestra una característica específica de Windows Presentation Foundation y, por consiguiente, no se siguen los procedimientos recomendados para el desarrollo de aplicaciones. Para obtener la información completa sobre los procedimientos recomendados para el desarrollo de aplicaciones de Windows Presentation Foundation (WPF) y Microsoft .NET Framework, vea la siguiente información según convenga:

Accesibilidad: Procedimientos de accesibilidad recomendados

Seguridad: Seguridad de Windows Presentation Foundation

Localización: Información general sobre la localización y globalización de WPF

Download sample

Generar el ejemplo

  • Instale el Kit de desarrollo de software de Windows (SDK) y abra la ventana de comandos del entorno de compilación. En el menú Inicio, elija Todos los programas, Microsoft Windows SDK y haga clic en Shell CMD.

  • Descargue el ejemplo, que encontrará en la documentación del kit de desarrollo de software (SDK), al disco duro.

  • Para generar el ejemplo en la ventana de comados del entorno de compilación, vaya al directorio de origen del ejemplo. En el símbolo del sistema, escriba MSBUILD.

  • Para generar el ejemplo en Microsoft Visual Studio, cargue la solución de ejemplo o el archivo del proyecto y presione CTRL+MAYÚS+B.

Ejecutar el ejemplo

  • Para ejecutar el ejemplo compilado en la ventana de comandos del entorno de compilación, ejecute el archivo .exe en la carpeta Bin\Debug o Bin\Release, que se encuentra bajo la carpeta de código fuente de ejemplo.

  • Para ejecutar el ejemplo compilado con depuración en Visual Studio, presione F5.

Vea también

Tareas

Ejemplo Disable Command Source via Dispatcher Timer

Conceptos

Información general sobre comandos