命令可以执行处理程序与我的线程任务冲突



我已经开始在我的 WPF 应用程序中引入一些并行编程,以加快更密集、重复的任务。进展顺利,因为我看到了执行时间和感知 UI 响应的明显差异。

显然,我一直小心翼翼地确保没有从我的 UI 线程和这些任务线程并发访问相关数据。

但是 - 有时(并非总是如此),我的程序崩溃,事实证明命令的 CanExecute 处理程序正在尝试访问在并行任务中处理的相同数据。或者,相反,我的并行任务失败,因为数据已被 CanExecute 处理程序使用。

有没有推荐的方法来解决这个问题?我可以关闭"可以执行"检查吗?我必须为每个 CanExecute 方法添加一个测试吗?

(附带说明一下,在查看此问题时,我对调用 CanExecute 处理程序的频率感到非常惊讶!我的一部分认为,出于性能原因,手动启用和禁用命令是值得的,但可以肯定的是,WPF 试图让我们更容易的那种卑微的任务!

是的,这也困扰着我,调用了多少次CanExecute。我能想到的唯一选择,因为你几乎无法控制CanExecute的检查,是最小化处理程序中的代码并使用CanExecute本地字段。

像这样:

CanExecuteSaveData ()
  {
  return _canTheDataBeSaved;
  }

在此代码中内置一些并发检查以避免并发问题。

最新更新