Что является самым эффективным и самым быстрым способом отправить, сообщение к потоку (не обрабатывают), которые работают в в то время как (1) цикл в c#/.net:
Используя синхронизируемую очередь (такой в Блокирующихся Очередях и Коммуникация Потока в C#)
Запуск цикла сообщения Используя Приложение. Выполнение системных winforms в контексте потока и прежде, чем выполнить application.run подписывается на событие, которые получают сообщение в контексте потока.
Используя сокет или именованный канал, чтобы отправить потоку сообщение.
В Linux я используюсь, чтобы сделать это с сокетами домена Unix, что эквивалентный путь состоит в том, чтобы сделать это в окнах? совместно использовать файл памяти? именованный канал? Что Вы думаете?
Я бы лично использовал очередь производителя / потребителя. По сути, это и есть цикл сообщений WinForms, только специфичным для Windows Forms способом.
Обратите внимание, что если вы можете использовать .NET 4.0, в структуру встроены коллекции , которые делают это очень просто. В частности, использование BlockingCollection
, обернутого вокруг ConcurrentQueue
, будет делать то, что вы хотите.
Я бы лично не использовал код GeeksCafe - я бы инкапсулируют природу производителя / потребителя в свой собственный класс, который обертывает очередь, а не обрабатывает любую очередь таким образом с помощью методов расширения. В частности, вам нужно, чтобы все стороны правильно обрабатывали очередь, а это означает, что, на мой взгляд, лучше предоставить ей собственный API.