2011-05-18 54 views
1

我已經開始在我的WPF應用程序中引入一些並行編程以加速更密集的重複性任務。這很好,因爲我看到執行時間和感知UI響應的顯着差異。命令CanExecute處理程序與我的線程任務發生衝突

我明顯很小心,以確保沒有從我的UI線程和這些任務線程併發訪問相關數據。

但是 - 有時(並非所有的時候),我的程序崩潰了,事實證明,命令的CanExecute處理程序試圖訪問正在並行任務中處理的相同數據。或者,相反,我的並行任務失敗,因爲數據已被CanExecute處理程序使用。

有沒有推薦的方法來解決這個問題?我可以關閉CanExecute嗎?我必須爲每個CanExecute方法添加一個測試嗎? (在一個側面說明中,在看這個問題時,我對CanExecute處理程序被調用的頻率感到非常驚訝!部分我認爲,出於性能原因,值得手動啓用和禁用這些命令,但肯定是WPF正試圖讓我們更容易的那種卑鄙的任務!)

回答

2

是的,那也困擾我了,CanExecute被調用了多少次。 我能想到的唯一選擇,因爲你幾乎不能控制CanExecute的檢查,所以最小化處理程序中的代碼並使用CanExecute本地字段。

事情是這樣的:

CanExecuteSaveData() 
    { 
    return _canTheDataBeSaved; 
    } 

,並建立在一些併發在此代碼檢查,以避免併發問題。