Я хочу написать свое первое настоящее приложение MultiThreaded C#. Хотя раньше я использовал BackgroundWorker и знал кое-что о блокировке (объекте), я никогда не использовал объект Thread, Monitor.Enter и т. Д., И я полностью потерял место, где приступить к проектированию архитектуры.Базовая архитектура и жизненный цикл потоков в C# /. Net 3.5SP1
По существу моя программа работает в фоновом режиме. Каждые 5 минут он проверяет веб-службу. Если веб-служба возвращает данные, она создает задания из этих данных и передает их в JobQueue. Затем JobQueue последовательно работает над этими заданиями - если новое задание добавляется, пока оно все еще работает над ним, оно будет стоять в очереди на задание. Кроме того, есть веб-сервер, позволяющий удаленный доступ к программе.
Как я понимаю, мне нужно 4 Темы:
- Главный поток
- "5-минутный Таймер" и WebService Thread
- JobQueue
- Веб-сервер
Резьба 2-4 должна быть создана, когда программа запускается и заканчивается, когда программа заканчивается, поэтому они запускаются только один раз.
Как уже говорилось, я действительно не знаю, как будет работать архитектура на этом. Что бы тему 1 сделала? Когда экземпляр класса MyProgram создается, должен ли он иметь Queue<Job>
как свойство? Как мне начать свою тему? Насколько я вижу, мне нужно передать функцию в поток - где должна сидеть эта функция? Если у меня есть класс «MyJobQueueThreadClass», который имеет все функции для Thread 3, как бы получить доступ к объекту в классе MyProgram? И если Thread - это просто функция, как я могу предотвратить ее досрочное завершение? Как сказано, Thread 2 ждет 5 минут, затем выполняет ряд функций и перезапускает 5-минутный таймер (Thread.Sleep (300)?) Снова и снова, пока моя программа не закончится (вызовите Thread.Abort (Thread2) в Close/Exit/Destructor MyProgram?)
Извините, что есть несколько вопросов, но, как сказал, что я своего рода потерял. Я попытался немного поработать, но это всегда немного сложно, так как я не могу сказать, относится ли статья к 3.5 SP1 или написана для 1.1 (я знаю, что были изменения, т.е. ReaderWriterLockSlim, но я не могу их помещать в перспективы). Кроме того, без какого-либо способа обнаружить неправильную информацию (которой много), Google Googling всегда похож на бафф-блейзер в минном поле ... –