Pergunta

Alguém escreveu uma versão do genérico fila do Net que implementos INotifyCollectionChanged, ou há um escondido no fundo do framework .Net em algum lugar já?

Foi útil?

Solução

Uma rápida pesquisa não mostrou nenhum resultado. Mas a interface é simples e seria quase trivial para estender a classe Queue e adicionar suporte para a interface. Apenas substituir todos os métodos assim:

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

Outras dicas

Eu usei a mesma abordagem que Chris Wenham. Sob carga, sofre de desempenho porque novos NotifyCollectionChangedEventArgs precisam ser alocados para cada Enqueue / Dequeue.

De qualquer maneira, na Enqueue, envie args com NotifyCollectionChangedAction.Add, o item adicionado, e Contagem-1 como o índice. No Dequeue, args de envio com NotifyCollectionChangedAction.Remove, o item removido, e índice 0.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top