【发布时间】:2017-07-30 18:03:02
【问题描述】:
在生产应用程序中,我们注意到我们的 WPF 按钮在快速双击时会触发 ICommand.Execute 方法两次。
现在,在每个命令上,应用程序都被全屏旋转动画覆盖,从而阻止了与应用程序的任何进一步交互。
This github repo 包含该问题的简约再现。请注意:
- 当 Button 的命令触发时,“IsBusy”标志设置为 true
- 因此,将显示 BusyIndicator 叠加层
- 因此,直到 300 毫秒后才能再次按下按钮
但是,特别是在速度较慢的计算机上,当快速双击时(真的很快,就像游戏一样快),可以在 BusyIndicator 阻止第二次调用的情况下触发两次命令(如果输出显示2 条“点击”线接二连三)。
这对我来说是出乎意料的行为,因为 IsBusy 标志在 UI 线程上立即设置为 true。 第二次点击怎么能通过? 我希望 IsBusy Binding 在 UI 线程上显示覆盖,阻止任何进一步的交互?
github 示例还包含 2 个解决方法:
- 使用 ICommand.CanExecute 阻止 Execute 处理程序
- 使用 PreviewMouseDown 防止双击
我正在尝试了解问题所在。 您更喜欢哪种解决方法?
【问题讨论】:
标签: wpf