我有一個使用MVVM模式的WPF項目。如何在我的WPF MVVM單元測試中避免交叉線程問題?
在特定的視圖模型中,我使用後臺任務(Task類)定期填充ObservableCollection。
我用下面的代碼來實際填充集合:
private void InitialiseAssignablePermissions()
{
var assignablePermissions = DetermineAssignablePermissions();
CurrentDispatcher.Invoke(() =>
{
foreach (var ap in assignablePermissions)
{
AssignablePermissions.Add(ap);
}
});
}
這工作完全和我的單元測試運轉順暢和所有走向綠色。但是,如果我有一個ICollectionView連接到ObservableCollection,當我運行測試時,我得到一個跨線程異常,並且測試失敗。當我第一次嘗試將項目添加到集合時,會發生異常。儘管項目執行時,代碼仍然愉快地運行。我需要收集視圖,因爲我想過濾項目。
唯一的例外是:
This type of CollectionView does not support changes to its
SourceCollection from a thread different from the Dispatcher thread.
的CurrentDispatcher類是一個簡單的我加的單元測試:
internal static class CurrentDispatcher
{
internal static void Invoke(Action action)
{
if (App.Current != null)
App.Current.Dispatcher.Invoke(action);
else
action();
}
}
我怎樣才能加入集合視圖,仍然單元測試?
你檢查該單位在測試App.Current不等於空?並且您還應該檢查Dispatcher.Thread.IsAlive以防萬一。 – TYY 2013-02-28 18:32:27