Лучший способ отправить сообщение в тему - PullRequest
16 голосов
/ 20 декабря 2009

Какой самый эффективный и быстрый способ отправить сообщение потоку (не процессу), который выполняется в цикле while (1) в c # /. Net:

  1. Использование синхронизированной очереди (например, в Блокировка очередей и связь потоков в C # )

  2. Выполнение цикла сообщений Использование Application.Run систем winforms в контексте потока и перед запуском application.run подписываются на событие, которое захватывает сообщение в контексте потока.

  3. Использование сокета или именованного канала для отправки потоку сообщения.

В Linux я привык делать это с помощью доменных сокетов Unix. Каков эквивалентный способ сделать это в Windows? поделитесь файлом памяти? именованная труба? Что ты думаешь?

1 Ответ

15 голосов
/ 20 декабря 2009

Лично я бы использовал очередь производителя / потребителя. Это фактически то, что представляет собой цикл сообщений WinForms, просто для Windows Forms.

Обратите внимание, что если вы можете использовать .NET 4.0, в инфраструктуру встроено коллекций , которые делают это очень просто. В частности, использование BlockingCollection<T>, обернутого вокруг ConcurrentQueue<T>, будет делать то, что вы хотите.

Я бы лично не использовал код GeeksCafe - я бы инкапсулировал природу производителя / потребителя в свой собственный класс, который обертывает очередь, а не обрабатывал любую очередь в этом путь через методы расширения. В частности, вам нужно, чтобы все стороны правильно обрабатывали очередь, а это значит, что, на мой взгляд, лучше предоставить ей собственный API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...