ObservableQueue?
-
07-07-2019 - |
Pregunta
¿Alguien ha escrito una versión de la Cola genérica de .Net que implemente INotifyCollectionChanged, o ya hay una oculta en el marco de .Net en algún lugar?
Solución
Una búsqueda rápida no mostró ningún resultado. Pero la interfaz es simple y sería casi trivial extender la clase Queue y agregar soporte para la interfaz. Simplemente anule todos los métodos de esta manera:
// 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);
}
Otros consejos
Utilicé el mismo enfoque que Chris Wenham. Bajo carga, el rendimiento se ve afectado porque las nuevas NotifyCollectionChangedEventArgs deben asignarse para cada Enqueue / Dequeue.
Independientemente, en Enqueue, envíe argumentos con NotifyCollectionChangedAction.Add, el elemento agregado y Count-1 como índice. En la Dequeue, envíe argumentos con NotifyCollectionChangedAction.Remove, el elemento eliminado e indexe 0.