我希望在调用继电器命令时启动一个任务,但是只要该任务正在运行,我希望禁用按钮。以下是一个示例:
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;
}
}
如何最好地检查任务是否正在运行?
以下是我的解决方案,但不确定它是否是最佳方法。
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);
}
}
更新:这里的每个答案都可以正常工作,但它们仍然不同意彼此,我刚刚达到了100声望,每当我达到100时,我就会开始一个赏金,因此我正在寻找一种在.NET 4.0中以任务为基础执行的最佳非内存泄漏异步RelayCommand实现。
T.Status != TaskStatus.Running
是最佳选择。 - FPGA