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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top