更新dispatcher线程上的ObservableCollection会导致UI冻结

本文关键字:UI 冻结 ObservableCollection dispatcher 线程 更新 | 更新日期: 2023-09-27 18:10:12

更新我的ObservableCollection时,我得到这个错误:

这种类型的CollectionView不支持改变它的从不同于Dispatcher线程的线程中获取SourceCollection。

使用这个答案作为指导,我认为这段代码可以工作:

private ObservableCollection<string> _userMessages = new ObservableCollection<string>();
public void AddUserMessage(string message)
{
    lock (_locker)
    {
        Action action = () =>
        {
            this._userMessages.Add(message);
        };
        Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, action);
    }
}

然而,我的UI现在冻结时调用Dispatcher.Invoke()。我做错了什么?

注意:我需要这样做,因为我(有时)从事件更新我的ObservableCollection

更新dispatcher线程上的ObservableCollection会导致UI冻结

试试这个:

Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, action);

你同步调用你的动作,它会导致UI冻结。