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;
        }
    }
posted @ 2026-08-10 10:52  Poetindusk  阅读(1)  评论(0)    收藏  举报