ObservableCollection<T>
обычно не может быть обновлено из фоновых тем. Вам нужно использовать Dispatcher.Invoke()
или Dispatcher.BeginInvoke()
, чтобы обеспечить добавление данных в поток, к которому принадлежит коллекция.
Application.Current.Dispatcher.Invoke((Action)(() => myObservableCollection.Add(value)));
Это довольно распространенная задача, стоит создать метод расширения, который позаботится об этом:
static class ObservableCollectionExtensions
{
internal static void InvokeAdd<T>(this ObservableCollection<T> self, T item)
{
Application.Current.Dispatcher.Invoke((Action<T>)self.Add, item);
}
internal static void BeginInvokeAdd<T>(this ObservableCollection<T> self, T item)
{
Application.Current.Dispatcher.BeginInvoke(new Action<T>(self.Add), item);
}
}
Таким образом, вы можете сохранить несколько нажатий клавиш и набрать вместо этого:
myObservableCollection.InvokeAdd(value);