Polecenie Relay może wykonać i zadanie
Chcę rozpocząć zadanie po wywołaniu polecenia przekazującego, ale chcę wyłączyć ten przycisk, dopóki to zadanie jest uruchomione
weź ten przykład
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;
}
}
jaki jest najlepszy sposób sprawdzenia, czy to zadanie jest uruchomione?
oto moje rozwiązanie, ale nie jestem pewien, czy jest to najlepszy sposób
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);
}
}
Aktualizacja: Każda odpowiedź tutaj działa poprawnie, ale mimo to nie zgadzają się ze sobą, a ja osiągnąłem 100 reputacji, rozpoczynam nagrodę za każdym razem, gdy osiągnę 100, więc szukam implementacji optymalnego niesynchronicznego wycieku asynchronicznego RelayCommand, który wykonuje się w ramach zadania w .net 4.0