Альтернатива класса Dispatcher (из .net 3.0) для использования в контексте .net 2.0 - PullRequest
1 голос
/ 11 августа 2010

Мне нужна альтернатива для Dispatcher (.net 3.0) для службы Windows (сделано в .net 2.0). Можете ли вы дать мне некоторое представление о том, как добиться чего-то подобного или указать мне несколько ссылок?

Я знаю, что у диспетчера позади SynchronizationContext, но я не знаю, как я могу использовать SynchronizationContext в службе.

Если вы считаете, что я должен придерживаться Dispatcher (.net 3.0) ... как я могу манипулировать им (OnServiceStop, OnServiceStart)

изм: Подробнее (см. Также ... здесь )

Идея состоит в том, что я хотел бы разместить в своей службе Windows некоторые расширения / плагины, которые будут связываться друг с другом с помощью метода ExecuteCommand(type, params).

Этот метод также вызывает событие для службы, чтобы получить результаты, если они были выполнены внутри плагина. Каждый плагин может иметь свой собственный поток, откуда он вызывает этот метод ExecuteCommand, поэтому я хотел бы собрать и синхронизировать все вызовы в одном потоке (основном служебном потоке) для правильного возврата результата.

Вот почему Диспетчер вступил в игру. Но мне хотелось бы, может быть, что-нибудь в .net 2.0 или вы думаете, что Dispatcher хорош в моем случае?

Спасибо.

1 Ответ

2 голосов
/ 11 августа 2010

Службы Windows не имеют ничего похожего на Dispatcher (или цикл сообщений в Windows Forms).Если вы хотите выполнить маршалинг из одного потока в другой, «целевой» поток должен будет выполнить своего рода цикл сообщений.

Если вы могли бы рассказать нам больше о том, чего вы пытаетесь достичь,было бы легче вам помочь.

РЕДАКТИРОВАТЬ: Хорошо, это звучит так, как будто в основном хотят очередь производителя / потребителя: один поток ждет, пока что-то присутствует в очереди, и обрабатывает его.Производители могут добавлять в очередь в любое время.

У меня есть очень простая реализация очереди производителя / потребителя в моем руководстве по созданию потоков, но вокруг могут быть более продвинутые реализации.(.NET 4 делает это легко, но в .NET 2 это сложнее.) Если вы делаете мою реализацию, вам нужно подумать о том, чтобы сделать ее общей и добавить условия завершения.У Джо Албахари есть другая реализация, которую вы также должны посмотреть на .

...