It's good that you understand that thread
Pause
and
Resume
are bad. They are really and critically dangerous, so those methods have been deprecated in .NET. The right approach is: you need to pause and resume the thread operation only in some selected point of its code, where the thread makes a blocking call. Such call puts the thread in a special wait state, wasting no CPU time; the thread is switched off and not scheduled back to execution until it is waken up by some condition.
If your purpose is just pausing and resuming a thread from some other thread use to "throttle" your thread's execution, the adequate class is the event wait handle,
System.Threading.ManualResetEvent
(
System.Threading.EventWaitHandle
can be used is well, with the constructor parameter indicating manual reset control). Please see:
http://msdn.microsoft.com/en-us/library/system.threading.manualresetevent%28v=vs.110%29.aspx[
^].
For further explanations, please see my past answer:
Running exactly one job/thread/process in webservice that will never get terminated (asp.net)[
^] (please see the first part of the answer, before the blocking queue, which is also very useful for different things).
For some background, see also:
Security on my developed dll[
^].
—SA