J'ai une application WPF qui affiche une ObservableCollection. C'est environ 182 lignes, et l'objet (appelons-le PositionLight) à l'intérieur de la collection a environ 70 propriétés à afficher.GUI gelée pendant la mise à jour de mon ObservableCollection
Tous les calculs pour entrer des données dans ces propriétés sont effectués dans un deuxième thread qui va tout recalculer toutes les 20 secondes, et enverra une liste à la fenêtre WPF, thx à un événement. De cette façon, le calcul ne ralentit pas l'interface graphique.
La liste est transformée en ObservableCollection dans le constructeur des EventArgs envoyés avec l'événement à GIU.
Le problème est même quand j'utiliser un BeginInvoke et un délégué à faire:
myGUICollection = myEventArgsCollection
l'interface graphique sera gelé pendant 3 à 4 secondes ... J'ai mis beaucoup de Console.Writeline pour savoir où est le goulot d'étranglement, mais il semble que le gel se produira juste après qu'il ait quitté la fonction appelée par BeginInvoke. Je suis vraiment perdu ici. J'utilise un PC 4 core avec 2,5 Go de RAM, donc je ne pense pas que ce soit un problème matériel.
Avez-vous une idée?
code pour vous donner une meilleure idée de l'insert dans l'interface graphique:
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);
}
Publiez du code supplémentaire pour analyser – TalentTuner
@saurabh: done. Je ai pris en compte ce que Fara a dit, mais toujours finir avec le même temps de congélation – Gregfr