我已经开始在我的WPF应用程序中引入一些并行编程,以加快更密集,重复的任务。它进展顺利,因为我看到执行时间和感知UI响应的明显差异。
我显然已经小心翼翼地确保不会从我的UI线程和这些任务线程中同时访问相关数据。
但是 - 有时(并非所有时间),我的程序崩溃,结果是命令的CanExecute处理程序试图访问并行任务中正在处理的相同数据。或者,相反,我的并行任务失败,因为CanExecute处理程序已经使用了数据。
是否有推荐的方法来解决此问题?我可以将CanExecute检查关闭吗?我必须为每个CanExecute方法添加一个测试吗?
(旁注,在查看这个问题时,我对CanExecute处理程序被调用的频率感到非常惊讶!部分我认为,出于性能原因,值得手动启用和禁用命令,但是当然,这是WPF试图让我们更轻松的那种卑鄙的任务!)
答案 0 :(得分:2)
是的,这也困扰了我,CanExecute被召唤了多少次。 我能想到的唯一选择,因为你几乎无法控制CanExecute的检查,最小化处理程序中的代码并使用CanExecute本地字段。
这样的事情:
CanExecuteSaveData ()
{
return _canTheDataBeSaved;
}
并在此代码中构建一些并发检查以避免并发问题。