WPF线程安全集合写法
开门见山,直接贴代码,该操作属于高可用代码(虽然用锁有部分性能损耗,高并发下会有性能问题,欢迎谈论优化),用于业务过程中需要用到UI线程的变量,这样的写法可以解耦UI属性和业务属性,同时可以在非UI线程访问UI线程的属性。
private readonly object _yourLock = new object();
private ICollectionView _yourSource;
//用于XAML前台绑定
public ICollectionView YourSource => _yourSource;
private ObservableCollection<YourClass> _yourList
public ObservableCollection<YourClass> YourList
{
get
{
//延迟加载节省内存
if (_yourList == null)
{
//操作过程中防止多进程修改
lock (_yourLock)
{
_yourList = new ObservableCollection<YourClass>();
//创建一个 ICollectionView 视图,并赋值
_yourSource = CollectionViewSource.GetDefaultView(_yourList);
//添加集合排序
_yourSource.SortDescriptions.Add(new SortDescription(nameof(YourClass.XXX), ListSortDirection.Ascending));
//指定支持线程安全的集合操作
BindingOperations.EnableCollectionSynchronization(_yourList, _yourLock);
//指定通知前台UI数据变更
RaisePropertyChanged(nameof(YourSource));
}
}
return _yourList;
}
}

浙公网安备 33010602011771号