Вы хотите использовать AutoResetEvent EventWaitHandle.
Скажем, вы хотите сделать что-то подобное ( ПРИМЕЧАНИЕ : не делайте этого!):
private Thread myThread;
private void WorkerThread()
{
myThread = Thread.CurrentThread;
while (true)
{
myThread.Suspend();
//Do work.
}
}
public void StartWorking()
{
myThread.Resume();
}
Как и другие говорили, это плохая идея. Несмотря на то, что только использование Suspend в собственном потоке относительно безопасно, вы никогда не сможете понять, вызываете ли вы Resume, когда поток фактически приостановлен. Так что Suspend и Resume были устаревшими.
Вместо этого вы хотите использовать AutoResetEvent:
private EventWaitHandle wh = new AutoResetEvent();
private void WorkerThread()
{
while(true)
{
wh.WaitOne();
//Do work.
}
}
public void StartWorking()
{
wh.Set();
}
Рабочий поток будет ожидать дескриптор ожидания, пока другой поток не вызовет StartWorking. Он работает так же, как и Suspend / Resume, так как AutoResetEvent позволяет «возобновить» только один поток.