Relais de Commande permet d'exécuter et d'une Tâche

je veux commencer une tâche lorsqu'un relais de commande est appelée, cependant je souhaite désactiver le bouton tant que la tâche est en cours d'exécution

prendre cet exemple

private ICommand update;
public ICommand Update
        {
            get
            {
                if (update == null)
                {
                    update = new RelayCommand(
                        param => Task.Factory.StartNew(()=> StartUpdate()),
                        param => true); //true means the button will always be enabled
                }
                return update;
            }
        }

quelle est la meilleure façon de vérifier si la tâche est en cours d'exécution?

voici ma solution, mais ne sais pas si c'est la meilleure façon

class Vm : ObservableObject 
    {

        Task T;
        public Vm()
        {
            T = new Task(() => doStuff());
        }

        private ICommand myCommand;
        public ICommand MyCommand
        {
            get { return myCommand ?? (myCommand = new RelayCommand( p => { T = new Task(() => doStuff()); T.Start(); }, p => T.Status != TaskStatus.Running)); }
        }


        private void doStuff()
        {
            System.Threading.Thread.Sleep(5000);
        }

    }

Mise à jour : Chaque réponse ici fonctionne très bien, mais encore ils ne sont pas d'accord les uns avec les autres, et j'ai juste atteint 100 points de réputation , je commence une prime à chaque fois que j'atteins 100, donc ce que je suis à la recherche d'une mise en œuvre optimale de non fuite de mémoire asynchrone RelayCommand qui s'exécute au sein d'une tâche .net 4.0

De la tâche.IsCompleted?
il l'habitude de travailler avec des Tâches.IsCompleted, à l'aide de T.Status != TaskStatus.Running est la meilleure option

OriginalL'auteur FPGA | 2013-11-24