Лично я бы использовал очередь производителя / потребителя. Это фактически то, что представляет собой цикл сообщений WinForms, просто для Windows Forms.
Обратите внимание, что если вы можете использовать .NET 4.0, в инфраструктуру встроено коллекций , которые делают это очень просто. В частности, использование BlockingCollection<T>
, обернутого вокруг ConcurrentQueue<T>
, будет делать то, что вы хотите.
Я бы лично не использовал код GeeksCafe - я бы инкапсулировал природу производителя / потребителя в свой собственный класс, который обертывает очередь, а не обрабатывал любую очередь в этом путь через методы расширения. В частности, вам нужно, чтобы все стороны правильно обрабатывали очередь, а это значит, что, на мой взгляд, лучше предоставить ей собственный API.