private void TaskProcessor() { bool run = true; WorkerEventHandler weh = null; WorkerState = WorkerState.Running; while (run && !IsDisposing && !IsDisposed) { switch (WorkerState) { case WorkerState.Running: try { if ((weh = GetActions()) == null) { if (WaitForAction) { Thread.Sleep(1); } else { Stop(); } } else { weh.Invoke(ActionState); if (ActionState.IsFinished) { Stop(); } } } catch (Exception error) { Error = error; Stop(); if (ThrowOnError) { throw; } } break; case WorkerState.Suspending: WorkerState = WorkerState.Suspended; break; case WorkerState.Suspended: Thread.Sleep(1); break; case WorkerState.Resuming: WorkerState = WorkerState.Running; break; default: case WorkerState.Stopping: run = false; break; } } WorkerState = WorkerState.Stopped; }