ObservableQueue?
-
07-07-2019 - |
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á?
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.