在调度程序线程上更新ObservableCollection会导致UI冻结

时间:2013-04-20 16:07:38

标签: c# multithreading events

更新我的ObservableCollection时,我收到了此错误:

  

此类型的CollectionView不支持对其进行更改   来自与Dispatcher线程不同的线程的SourceCollection。

使用this answer作为指南,我认为此代码可行:

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);
    }
}

但是,我的用户界面现在在调用Dispatcher.Invoke()时冻结。我做错了什么?

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

1 个答案:

答案 0 :(得分:1)

试试这个:

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

您同步调用操作,导致UI冻结。