Если ваш поток ничего не делает, пока вы не хотите его запустить, то зачем запускать его, пока вы не хотите, чтобы он продолжал?
Если вы хотите запустить фоновый поток, затем приостановить / подождать какое-то событие, а затем продолжить, простой метод - использовать семейство классов EventWaitHandle
.
Простой пример (взят из этого вопроса ). Оба потока должны иметь доступ к следующему:
private ManualResetEvent _workerWait = new ManualResetEvent(false);
Тогда в вашей рабочей ветке:
_workerWait.WaitOne();
Теперь он будет блокироваться, пока ваш основной поток не вызовет:
_workerWait.Set()
Для более полного обсуждения ваших вариантов и некоторых примеров, см .: http://www.albahari.com/threading/