Devo essere in grado di attivare un evento ogni volta che un oggetto viene aggiunto a un Queue<Delegate>
.C#: attivazione di un evento quando un oggetto viene aggiunto a una coda
ho creato una nuova classe che estende Queue
:
public delegate void ChangedEventHandler(object sender, EventArgs e);
public class QueueWithChange<Delegate> : Queue<Delegate>
{
public event ChangedEventHandler Changed;
protected virtual void OnChanged(EventArgs e) {
if (Changed != null)
{
Changed(this, e);
}
}
}
E poi attaccato l'evento da un'altra classe, come ad esempio:
QueueWithChange<TimerDelegate> eventQueue = new QueueWithChange<TimerDelegate>();
//
eventQueue.Changed += new ChangedEventHandler(delegate(object s, EventArgs ex) {
//This event is not being triggered, so this code is unreachable atm...and that is my problem
if (eventQueue.Count > 0)
{
eventQueue.Dequeue().Invoke(new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(5) });
actionTimer.Stop();
}
});
Ma ogni volta che Enqueue un oggetto (eventQueue.Enqueue(something)
), l'evento allegato non viene licenziato.
Cosa mi manca qui?
Eccellente; Questo e 'esattamente quello che stavo cercando. Grazie Marc per la risposta di qualità. E controllerò anche la coda dei thread che hai menzionato. –
Nota che ho impostato erroneamente una classe base; corretto nel codice ... –
Dal punto di vista del principio di progettazione, è meglio utilizzare la composizione sull'ereditarietà (in senso lato) quindi sostengo la soluzione. – uriDium