Это мой подход для добавления элементов в ObservableCollection в отдельный поток, взятый из ThreadPool.ObservableCollection, заполненный нитью ThreadPool
Как мы знаем, что это поднимет исключение:
This type of CollectionView does not support changes to its SourceCollection from a thread different from the Dispatcher thread.
Я знаю, что эта тема довольно популярна здесь, но я не нашел какое-либо решение, которое соответствует ситуациям, описанным в коде ниже:
namespace WpfApplication1
{
class Item
{
public string name
{
get;
set;
}
}
class Container
{
public ObservableCollection<Item> internalList = new ObservableCollection<Item>();
}
public partial class MainWindow : Window
{
Container container = new Container();
void addItems()
{
Item item = new Item() { name = "jack" };
container.internalList.Add(item);
}
public MainWindow()
{
InitializeComponent();
ThreadPool.QueueUserWorkItem(delegate { this.addItems(); });
MyDataGrid.ItemsSource = container.internalList;
}
}
}
Какое решение лучше всего подходит для решения этой проблемы?
Спасибо!
Либо используйте WPF 4.5, где разрешена такая деятельность по перекрестным потокам, либо - еще лучше - подготовьте данные в фоновом потоке, верните его, а затем заселите наблюдаемую коллекцию в потоке пользовательского интерфейса ... –