Альтернатива классу Dispatcher (из.net 3.0) для использования в контексте.net 2.0

Мне нужна альтернатива для 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 ответ

Решение

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

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

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

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

Другие вопросы по тегам