【发布时间】:2012-06-13 13:13:58
【问题描述】:
我想知道我需要做些什么才能使模型在 MVVM 中线程安全。假设我有以下类,它被实例化为单例:
public class RunningTotal: INotifyPropertyChange
{
private int _total;
public int Total
{
get { return _total; }
set
{
_total = value;
PropertyChanged("Total");
}
}
...etc...
}
我的视图模型通过属性公开它:
public RunningTotal RunningTotal { get; }
我的视图绑定了一个文本块,即{Binding Path=RunningTotal.Total}。
我的应用有一个后台线程,它会定期更新 Total 的值。假设没有其他东西更新 Total,我应该做什么(如果有的话)使所有这些线程安全?
现在,如果我想做类似的事情但使用Dictionary<> 或ObservableCollection<> 类型的属性怎么办?哪些成员(添加、删除、清除、索引器)是线程安全的?我应该改用 ConcurrentDictionary 吗?
【问题讨论】:
-
试试下面的链接,它提供了一个线程安全的 ObservableCollection 类型的解决方案,可以在任何线程上工作并且可以通过多个 UI 线程绑定到:codeproject.com/Articles/64936/…