volatile bool paused; ManualResetEvent resumeEvent = new ManualResetEvent(false); void MyThread() { for (int i = 0; i < 100; i++) { if (paused) { resumeEvent.WaitOne(); } DoWork(); } } void Pause() { resumeEvent.Reset(); paused = true; } void Resume() { paused = false; resumeEvent.Set(); }