У меня есть приложение WPF, которое отображает ObservableCollection. Это около 182 строк, и объект (назовем его PositionLight) внутри коллекции имеет около 70 свойств для отображения.GUI заморожен, когда я обновляю свой ObservableCollection
Все вычисления для ввода данных в этих свойствах выполняются во втором потоке, который будет пересчитывать все каждые 20 секунд и отправит список в окно WPF, thx к событию. Таким образом, расчет не замедляет работу графического интерфейса.
Список преобразуется в ObservableCollection в конструкторе EventArgs, отправленного с событием в GIU.
Проблема заключается в том, даже если я использую BeginInvoke и делегат сделать:
myGUICollection = myEventArgsCollection
графический интерфейс пользователя будет заморожен на 3 до 4 секунд ... Я положил много Console.Writeline, чтобы узнать, где узкое место, но похоже, что замораживание произойдет сразу после того, как оно покинет функцию, вызванную BeginInvoke. Я действительно потерялся здесь.
Я использую 4-ядерный ПК с RAM 2.5Go, поэтому я не думаю, что это проблема с оборудованием.
У вас есть идея?
Некоторый код, чтобы дать вам лучшее представление о вставке в графическом интерфейсе:
public bool myCoreScope_OnCoreCalculationHandler(object myObject, CoreCalculationEventArgs myEventArgs)
{
foreach (PositionLight item in myEventArgs.MyPositionList)
{
lv.Dispatcher.BeginInvoke(new DisplayPositionItemCallBack(DisplayPositionItem), DispatcherPriority.Send, new object[] { item });
}
}
private delegate void DisplayPositionItemCallBack(PositionLight item);
private void DisplayPositionItem(PositionLight item)
{
try
{
MyPositionList.Remove(MyPositionList.First(position => position.ID== item.ID));
}
catch (Exception)
{ }
MyPositionList.Add(item);
}
Опубликовать еще код для анализа – TalentTuner
@saurabh: done. Я принял во внимание то, что сказал Фара, но все же в конечном итоге с тем же временем замораживания – Gregfr