Подтвердить что ты не робот

Лучший способ отправить сообщение в поток

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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