更新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
。
试试这个:
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, action);
你同步调用你的动作,它会导致UI冻结。