In Warteschlangen Ereignis-Queue<T> in C#
Ich bin neu auf event-und Tagungsteilnehmer. Wie kann ich implementieren einen Ereignis in die Warteschlange eingereiht, die für ein Objekt von Typ Queue<T>
?
Ich bin mit C# und .Net 4.0
- Da
Queue<T>
nicht bereits über ein solches Ereignis, und der manipulation Methoden (z.B. Enqueue, Dequeue, etc.) sind nicht virtuell, Sie können einfach nicht sicher stellen diese Funktionalität, die für diese Klasse. Ihr besser schreiben, Ihre eigene Queue-Klasse, die Umsetzung dieser Veranstaltungen, und vielleicht mit der nativenQueue<T>
als sicherungsspeicher.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Kapseln der Queue-Klasse mit Ihrer eigenen Klasse, so etwas wie:
HTH!
Es sind keine Ereignisse gefeuert aus dem System.Sammlungen.* suite von Klassen. Da machst du mit .NET 4.0 verwenden, können Sie möchten schauen Sie in
BlockingCollection<T>
statt, die, anstatt sich auf Ereignisse, die Sie verwenden würden, die Erzeuger-Verbraucher-Muster Nehmen Elemente aus der Auflistung, wie Sie kommen aus einem anderen thread.BlockingCollection<T>
kümmert sich um alle thread-Sicherheit und-Synchronisierung für Sie effizient.Den Standard-sichern-Typ für
BlockingCollection<T>
istConcurrentQueue<T>
die klingt wie das, was Sie wollen, aber es sollte angemerkt werden, dass können Sie ändern, Sie verwenden einConcurrentStack<T>
oderConcurrentBag<T>
wenn Sie wollen/nicht Geist verschiedenen Bestell-Merkmale.Ein weiteres großartiges feature von
BlockingCollection<T>
ist die Fähigkeit,Grenzen setzen, die helfen können, blockieren den Produzenten von hinzufügen weiterer Elemente der Auflistung als der Verbraucher Schritt halten kann.Für eine gute schreiben, bis auf alle Aspekte zu diesem Thema, ich schlage vor, Check-out in diesem blog-post von Alexeandra Rusina. Der Beitrag deckt auch die Wege zur Arbeit mit BlockingCollection mit der Task Parallel Library.
while(true)