2012-04-26 2 views
2

Я новичок в среде .NET. Мне нужна служба Windows, метод Start и Stop вызовет определенный класс, скажем, метод Start и Stop MainContext соответственно. Класс MainContext будет содержать список расширений, загруженных через MEF. Каждое расширение необходимо запускать как отдельный поток одновременно.Запуск и остановка параллельных потоков через службу Windows

Класс MainContext будет содержать два общедоступных метода Start и Stop, оба типа возвращаемого типа и не содержат аргументов. При вызове метода Start он запускает поток для каждого расширения, загружаемого через MEF одновременно. В то время как метод Stop остановит все потоки, запущенные с помощью метода Start.

Какая из лучших практик резьбы в этой ситуации? Я запутался. Должен ли я использовать класс System.Threading.Tasks.Task или класс System.Threading.Thread для многопоточности или использовать любую другую технику? Что будет лучше соответствовать моим требованиям и обеспечит мне большую гибкость и стабильность?

+0

'System.Threading.Thread' соответствует вашим потребностям, а не' System.Threading.Tasks.Task', однако вам также нужна некоторая логика внутри ваших методов потоков, чтобы остановить поток. –

+0

Представим себе, что у вас есть 100 расширений и один двухъядерный процессор. В этом случае запуск 100 потоков не поможет вам сделать программу быстрее. Вы должны рассказать о характере ваших расширений - какую работу они выполняют? – Dennis

+0

@ Dennis: 100 расширений не было бы в моем приложении. Скажем, в большинстве случаев от 5 до 8 расширений будут работать одновременно. И для каждого продления нет тяжелой работы. Это будет очень простой и легкий вес, скажем, просмотр файловой системы и т. Д. –

ответ

0

Я сделал что-то подобное, используя MAF, с надстройками, просматривая файловые серверы, базы данных и веб-службы. Служба Windows вызывает методы запуска и остановки в каждой надстройке, которые, в свою очередь, включают или отключают System.Timer.Timers. Фактическая обработка выполняется для обработчика прошедшего события каждого таймера, который выполняется по объединенному потоку.

Одна из надстроек отслеживает таблицу базы данных, в которой используется межпроцессная связь, чтобы я мог контролировать и контролировать другие надстройки из приложения пользовательского интерфейса.

Смежные вопросы