У меня есть дочерний поток, который что-то там делает в бесконечном цикле.
В какой-то момент времени мне надо:
1. Убить дочерний поток. Сейчас я делаю нечто подобное
private Thread _thread;
private Boolean _isWorking;
private void DoWork()
{
while(_isWorking)
{
Console.WriteLine("SomeWork");
Thread.Sleep(1000);
}
}
public void Start()
{
_thread = new Thread(DoWork);
_isWorking = true;
_thread.Start();
}
public void Stop()
{
_isWorking = false;
while (_thread.ThreadState != ThreadState.Stopped)
Thread.Sleep(100);
}
Я знаю про метод Abort, но он может вызвать утечку ресурсов. Может быть есть более разумный метод без постоянной проверки флага?
2. Заморозить дочерний поток на бесконечно большее время. Можно как вариант сделать еще одну проверка флага и если она проходит, то войти в AutoResetEvent. А что бы разбудить поток, то сбрасываем AutoResetEvent. Еще есть вариант делать бесконечный сон, а для пробуждения использовать Interrupt. Но тут опять же выходит постоянная проверка флага.