我有一个使用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