我正在尝试禁用频繁的用户手势,以便同一命令不会同时执行多次。
private readonly SemaphoreSlim _semaphoreSlim = new SemaphoreSlim(1);
public bool MyCommandCanExecute { get; set; } = true;
public DelegateCommand MyCommand { get; set; }
MyCommand = new DelegateCommand(async () =>
{
await _semaphoreSlim.WaitAsync();
try
{
MyCommandCanExecute = false;
// run code
}
finally
{
MyCommandCanExecute = true;
_semaphoreSlim.Release();
}
}).ObservesCanExecute(p => MyCommandCanExecute);
我不确定我这样做是否正确。
- 是
SemaphoreSlim
矫枉过正还是我应该把它留在那里以确保安全? - 需要,因为我
ObservesCanExecute()
手动打开和关闭标志? - 我在同一个视图模型中有几个命令,每个命令都有一个单独的 CanExecute 标志。我想我很快就会遇到需要在另一个命令运行时启用一个命令的情况。
_semaphoreSlim
是在一个命令正在进行时推迟所有命令,还是推迟对同一命令的多次调用?