У меня возникли проблемы при использовании фонового работника для создания моей объектной модели.Как я могу создать общий элемент управления из потока backgroundWorker?
Как я понимаю, я не могу найти обходное решение.
Вот псевдо логика:
Вызов Вебсервис асинхронной
При получении открыть фоновый рабочий, и загружать данные в элементы управления в фоновом режиме
в методе Load , найдите существующий объект и, если он не найден, создайте новый.
Все объекты, созданные наследуемыми от Control (с прозрачным абстрактным слоем).
В то время как я создаю элементы управления в главном потоке, то функция отлично работает:
public static T Find<T>(ObservableCollection<T> collection, int objectId)
where T : FormaliteBaseControl, new()
{
foreach (T item in collection)
{
if (item.ObjectId == objectId)
return item;
}
return new T();
}
Конечно, при вызове из фонового потока, поперечное исключение резьбы происходит в «новом Т()» В Silverlight , нет способа вызвать Dispatcher.Invoke синхронно.
И хотя я создаю около 450 объектов таким образом, я хотел бы сохранить создание объектной модели на фоне без снижения производительности с помощью Thread.Sleep или других «отличных» методов.
Спасибо за ваши ответы.
В каком контейнере находятся элементы управления 450 UI? Элемент ItemsControl или ListBox? Что-то, что виртуализировано? – WiredPrairie
Поскольку вы используете поток, вы можете столкнуться с проблемами с коллекцией, которую используете, - если вы изменяете коллекцию из другого потока (в то время как другой поток использует перечислитель через foreach). – WiredPrairie