【发布时间】:2016-08-20 03:32:48
【问题描述】:
我正在尝试禁用频繁的用户手势,以便同一命令不会同时执行多次。
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是在一个命令正在进行时阻止所有命令,还是阻止对同一命令的多次调用?
【问题讨论】:
标签: c# wpf mvvm prism delegatecommand