Я сделал несколько похожих вещей, и на самом деле это просто очередь сообщений, поэтому вот несколько замечаний по базовой реализации:
- Создайте класс, содержащий некоторую очередь вашего типа работы(Очередь может быть хорошим выбором), Thread, AutoResetEvent, метод QueueJob и событие (скажем, «HandleJob» или что-то в этом роде)
- Запуск потока.Поток должен дождаться события, а затем обработать все задания в очереди.Для каждой работы просто запустите событие HandleJob.Если вам это нужно в потоке пользовательского интерфейса, просто используйте обработчик событий Invoke или BeginInvoke.Наконец, очистите очередь.
- Когда вызывается QueueJob, добавьте задание в очередь и сообщите о событии.
- Примечание: вы хотите убедиться, что доступ к очереди синхронизирован
Кроме того, я думаю, что задания, которые должны выполняться параллельно, на самом деле недолжны быть заданиями - вы можете выполнять их в ThreadPool.
Отсюда вы можете выполнять временное выполнение (скажем, задание, которое должно выполняться через 10 секунд), выполнение итераторов и поддержку заданий, которыепредоставить доступ к AsyncWaitHandler (например, разрешить выполнение других заданий в ожидании чего-либо).