2011-05-18 36 views
1

我已经开始在我的WPF应用程序中引入一些并行编程以加速更密集的重复性任务。这很好,因为我看到执行时间和感知UI响应的显着差异。命令CanExecute处理程序与我的线程任务发生冲突

我明显很小心,以确保没有从我的UI线程和这些任务线程并发访问相关数据。

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

有没有推荐的方法来解决这个问题?我可以关闭CanExecute吗?我必须为每个CanExecute方法添加一个测试吗? (在一个侧面说明中,在看这个问题时,我对CanExecute处理程序被调用的频率感到非常惊讶!部分我认为,出于性能原因,值得手动启用和禁用这些命令,但肯定是WPF正试图让我们更容易的那种卑鄙的任务!)

回答

2

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

事情是这样的:

CanExecuteSaveData() 
    { 
    return _canTheDataBeSaved; 
    } 

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