Condividi tramite


Esempio Disable Command Source via System Timer

Aggiornamento: novembre 2007

In questo esempio viene illustrato come attivare e disattivare un'origine comando tramite Windows.System.Timers.Timer.

Windows.System.Timers.Timer viene eseguito in un thread separato rispetto a quello dell'interfaccia utente, pertanto per aggiornare l'interfaccia utente è necessario eseguire alcune operazioni aggiuntive. Per risolvere il problema in modo efficace ed elegante, è possibile utilizzare un oggetto DispatcherTimer. Il suo utilizzo risulta più facile perché l'oggetto DispatcherTimer viene eseguito nello stesso thread dell'interfaccia utente. Per informazioni, vedere l'esempio Esempio Disable Command Source via Dispatcher Timer . Vi sono casi in cui potrebbe tuttavia essere necessario utilizzare una classe che non viene eseguita nel thread dell'interfaccia utente e questo esempio viene fornito proprio a tale scopo.

Le origini comando, ad esempio la classe MenuItem e la classe Button, rimangono in ascolto dell'evento CanExecuteChanged sul RoutedCommand al quale sono collegate in modo da determinare quando è necessario ottenere informazioni sul comando per verificare se il comando può essere eseguito nella destinazione di comando corrente. Le origini del comando verranno in genere disattivate se il comando non può essere eseguito e attivate se il comando può essere eseguito, ad esempio nel caso di un oggetto MenuItem che viene disattivato quando il comando non può essere eseguito.

Il CommandManager notifica al RoutedCommand tramite l'evento RequerySuggested che le condizioni sono cambiate nella destinazione di comando. Il RoutedCommand genera l'evento CanExecuteChanged del quale l'origine comando è in ascolto. Questo meccanismo di notifica risulta in genere adeguato, ma in alcuni casi il CommandManager non è consapevole del fatto che le condizioni sono cambiate nella destinazione di comando. Pertanto, l'evento RequerySuggested non viene mai generato e l'origine comando non ottiene mai le informazioni sul RoutedCommand. In questi casi, è possibile forzare il CommandManager affinché generi l'evento RequerySuggested mediante una chiamata a InvalidateRequerySuggested.

In questo esempio viene creato un RoutedCommand che può essere eseguito solo quando i secondi dell'ora corrente sono maggiori di un valore di destinazione. Viene creato l'oggetto System.Windows.Timers.Timer che ogni secondo inserisce un processo nel Dispatcher di un thread dell'interfaccia utente. Poiché questo processo è pianificato nel Dispatcher del thread dell'interfaccia utente, l'interfaccia utente verrà aggiornata automaticamente.

Il metodo inserito nel Dispatcher chiama il InvalidateRequerySuggested. In questo modo si assicura che l'origine comando riceva l'evento CanExecuteChanged affinché possa effettuare la chiamata al metodo CanExecute sul comando.

Per ulteriori informazioni sui comandi, vedere Cenni preliminari sull'esecuzione di comandi.

Nell'esempio viene illustrata una funzionalità specifica di Windows Presentation Foundation e non vengono pertanto seguite le procedure consigliate per lo sviluppo di applicazioni. Per una descrizione completa delle procedure consigliate per lo sviluppo di applicazioni Windows Presentation Foundation (WPF) e Microsoft .NET Framework, fare riferimento ai seguenti argomenti in base alle esigenze:

Accesso facilitato - Procedure consigliate per l'accesso facilitato

Sicurezza - Sicurezza di Windows Presentation Foundation

Localizzazione - Cenni preliminari sulla globalizzazione e localizzazione WPF

Download sample

Compilazione dell'esempio

  • Installare Windows Software Development Kit (SDK) e aprire la finestra di comando dell'ambiente di compilazione. Fare clic sul pulsante Start, quindi scegliere Tutti i programmi, Microsoft Windows SDK, quindi fare clic su CMD Shell.

  • Scaricare l'esempio nel disco rigido locale, in genere dalla documentazione SDK.

  • Per generare l'esempio dalla finestra di comando dell'ambiente di compilazione , passare alla directory di origine dell'esempio. Al prompt dei comandi digitare MSBUILD.

  • Per compilare l'esempio in Microsoft Visual Studio, caricare il file della soluzione o del progetto dell'esempio e premere CTRL+MAIUSC+B.

Esecuzione dell'esempio

  • Per eseguire l'esempio compilato dalla vfinestra di comando dell'ambiente di compilazione, eseguire il file EXE nella cartella Bin\Debug o Bin\Release contenuta sotto la cartella del codice sorgente dell'esempio.

  • Per eseguire l'esempio compilato con il debug in Visual Studio, premere F5.

Vedere anche

Attività

Esempio Disable Command Source via Dispatcher Timer

Concetti

Cenni preliminari sull'esecuzione di comandi