Альтернатива классу 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 это сложнее.) Если вы все- таки воспользуетесь моей реализацией, вам нужно подумать о том, чтобы сделать ее общей и добавить условия завершения. У Джо Албахари есть еще одна реализация, на которую вам следует обратить внимание.