Observable Quoi?
-
07-07-2019 - |
Question
Quelqu'un a-t-il déjà écrit une version de la file d'attente générique .Net qui implémente INotifyCollectionChanged, ou existe-t-il déjà une version cachée au fond du framework .Net?
La solution
Une recherche rapide n'a donné aucun résultat. Mais l'interface est simple et il serait presque trivial d'étendre la classe de file d'attente et d'ajouter un support pour l'interface. Remplacez donc simplement toutes les méthodes:
// this isn't the best code ever; refactor as desired
protected void OnCollectionChanged( NotifyCollectionChangedEventArgs ccea){
var temp = CollectionChanged;
if(temp != null) temp(this, ccea);
}
// and later in the class
public override SomeMethodThatAltersTheQueue(object something){
// record state of collection prior to change
base.SomeMethodThatAltersTheQueue(something)
// create NotifyCollectionChangedEventArgs with prior state and new state
OnCollectionChanged(ccea);
}
Autres conseils
J'ai utilisé la même approche que Chris Wenham. Sous charge, les performances en pâtissent car de nouveaux NotifyCollectionChangedEventArgs doivent être alloués pour chaque file d'attente / file d'attente.
Quoi qu'il en soit, dans la file d'attente, envoyez des arguments avec NotifyCollectionChangedAction.Add, l'élément ajouté et Count-1 en tant qu'index. Dans la file d'attente, envoyez les arguments avec NotifyCollectionChangedAction.Remove, l'élément supprimé et l'index 0.