Ich muss in der Lage sein, ein Ereignis auszulösen, wenn ein Objekt zu einer Queue<Delegate>
hinzugefügt wird.C#: Auslösen eines Ereignisses, wenn ein Objekt zu einer Warteschlange hinzugefügt wird
habe ich eine neue Klasse, die Queue
erweitert:
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);
}
}
}
Und dann angebracht, um das Ereignis aus einer anderen Klasse, wie solche:
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();
}
});
Aber immer, wenn ich enqueue ein Objekt (eventQueue.Enqueue(something)
), Das angehängte Ereignis wird nicht ausgelöst.
Was fehlt mir hier?
Ausgezeichnet; Das ist genau das, wonach ich gesucht habe. Danke Marc für die qualitativ hochwertige Antwort. Und ich werde auch über die Threaded Queue, die du erwähnt hast, nachsehen. –
Beachten Sie, dass ich eine Basisklasse falsch festgelegt habe; im Code behoben ... –
Aus einer Design-Prinzip-Perspektive ist es besser, Zusammensetzung über Vererbung (allgemein gesprochen) zu verwenden, damit ich Ihre Lösung unterstütze. – uriDium