gpt4 book ai didi

C# 线程安全(特别是 MVVM/WPF)

转载 作者:行者123 更新时间:2023-11-30 13:27:29 24 4
gpt4 key购买 nike

我想知道我需要做什么才能使模型在 MVVM 中线程安全。假设我有以下类,它被实例化为单例:

public class RunningTotal: INotifyPropertyChange
{
private int _total;
public int Total
{
get { return _total; }
set
{
_total = value;
PropertyChanged("Total");
}
}
...etc...
}

我的 View 模型通过属性公开它:

public RunningTotal RunningTotal { get; }

我的 View 绑定(bind)了一个文本 block ,即 {Binding Path=RunningTotal.Total} .

我的应用有一个后台线程,它会定期更新 Total 的值。假设没有其他更新 Total,我应该做什么(如果有的话)来使所有这些线程安全?

现在,如果我想做类似的事情但使用 Dictionary<> 类型的属性怎么办? , 或 ObservableCollection<> ?哪些成员(add、remove、clear、indexer)是线程安全的?我应该改用 ConcurrentDictionary 吗?

最佳答案

My app has a background thread that periodically updates the value of Total. Assuming nothing else updates Total, what (if anything) should I do to make all this thread-safe?

对于标量属性,您不需要做任何特别的事情; PropertyChanged事件自动编码到 UI 线程。

Now, what if I wanted to do something similar but using a property of type Dictionary<>, or ObservableCollection<>? Which members (add, remove, clear, indexer) are thread-safe? Should I use a ConcurrentDictionary instead?

不,这不是线程安全的。如果您更改 ObservableCollection<T> 的内容从后台线程,它会中断。您需要在 UI 线程上执行此操作。一种简单的方法是使用一个在 UI 线程上引发其事件的集合,就像描述的那样 here .

至于Dictionary<TKey, TValue> , 它不会在内容更改时发出通知,因此无论如何都不会通知 UI。

关于C# 线程安全(特别是 MVVM/WPF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11015615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com