Domanda

Qualcuno ha scritto una versione della coda generica di .Net che implementa INotifyCollectionChanged o ce n'è già uno nascosto nel framework .Net da qualche parte?

È stato utile?

Soluzione

Una ricerca rapida non ha mostrato alcun risultato. Ma l'interfaccia è semplice e sarebbe quasi banale estendere la classe Queue e aggiungere il supporto per l'interfaccia. Sostituisci tutti i metodi in questo modo:

// 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);
}

Altri suggerimenti

Ho usato lo stesso approccio di Chris Wenham. Sotto carico, le prestazioni ne risentono perché è necessario assegnare nuovo NotifyCollectionChangedEventArgs per ogni Enqueue / Dequeue.

Indipendentemente da ciò, in Enqueue, invia args con NotifyCollectionChangedAction.Add, l'elemento aggiunto e Count-1 come indice. In Dequeue, invia args con NotifyCollectionChangedAction.Remove, l'elemento rimosso e l'indice 0.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top