Relais-Befehl ausführen kann und eine Aufgabe

ich soll eine Aufgabe zu beginnen, wenn ein relais-Befehl aufgerufen wird, aber ich wollen, deaktivieren Sie die Schaltfläche so lange, wie die Aufgabe ausgeführt wird

nehmen Sie dieses Beispiel

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;
            }
        }

was ist der beste Weg, um zu überprüfen, ob die Aufgabe ausgeführt wird?

hier ist meine Lösung aber nicht sicher, ob es der beste Weg,

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);
        }

    }

Update : Jede Antwort hier funktioniert gut, aber trotzdem sind Sie nicht einverstanden mit einander, und ich hatte gerade eine 100 Ruf , ich starte ein Kopfgeld, wenn ich bei 100 angekommen, was ich also Suche, ist eine Implementierung für eine optimale Speicher nicht undicht asynchrone RelayCommand, der ausgeführt wird, innerhalb einer Aufgabe .net 4.0

Aufgabe.IsCompleted?
es wird nicht funktionieren mit der Aufgabe.IsCompleted, mit T.Status != TaskStatus.Running ist die beste option

InformationsquelleAutor FPGA | 2013-11-24

Schreibe einen Kommentar