2013-04-20 120 views
0

當更新我的ObservableCollection,我得到這個錯誤:更新的ObservableCollection導致UI凍結

This type of CollectionView does not support changes to its SourceCollection from a thread different from the Dispatcher thread.

使用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()時,我的UI現在會凍結。我做錯了什麼?

注:我需要這樣做,因爲我(有時)從事件中更新我的ObservableCollection

+0

userMessages.CollectionChanged中會發生什麼? – Filip 2013-04-20 16:11:14

+0

@Filip我沒有重寫'ObservableCollection'中的任何功能。 – 2013-04-20 16:17:08

回答

1

試試這個:

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

您同步調用你的動作,它會導致UI凍結。

+1

是的,但它在很大程度上否定了'lock()'的使用。 – 2013-04-20 17:05:36