1

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

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

但是 - 有时(不是一直),我的程序崩溃了,结果是命令的 CanExecute 处理程序正在尝试访问正在并行任务中处理的相同数据。或者,相反,我的并行任务失败,因为数据已被 CanExecute 处理程序使用。

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

(附带说明,在查看这个问题时,我对 CanExecute 处理程序被调用的频率感到非常惊讶!我的一部分认为,出于性能原因,值得手动启用和禁用命令,但肯定是这样WPF 试图让我们更轻松的一些琐碎任务!)

4

1 回答 1

2

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

像这样的东西:

CanExecuteSaveData ()
  {
  return _canTheDataBeSaved;
  }

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

于 2011-05-18T09:36:53.573 回答