private void ProcessLoop() { WorkerServiceController controller = null; while (true) { _processEvent.WaitOne(); while (_processQueue.Count > 0) { lock (__lockObject) { if (_processQueue.Count == 0) { break; } controller = _processQueue[0]; _processQueue.RemoveAt(0); } switch (controller.Status) { case WorkerServiceStatus.NotInitialized: controller.InitializeInternal(); _processQueue.AddIfNotExists(controller); break; case WorkerServiceStatus.Sleeping: controller.ExecuteInternal(); break; } } } }