C# CF Перезапустить поток

Предположим, у вас есть форма с кнопкой, которая запускает / останавливает поток (НЕ останавливая или прерывая, мне действительно нужно остановить поток!) Проверьте этот код:

Constructor()
{
  m_TestThread = new Thread(new ThreadStart(ButtonsThread));
  m_bStopThread = false;
}

ButtonClick
{
  // If the thread is not running, start it
  m_TestThread.Start();
  // If the thread is running, stop it
  m_bStopThread = true;
  m_TestThread.Join();
}

ThreadFunction()
{
  while(!m_bStopThread)
  {
    // Do work
  }
}

2 вопроса (помните CF): - Как я могу узнать, работает ли поток (кажется, я не могу получить доступ к m_pThreadState, и я пробовал C++ GetThreadExitCode(), он дает ложные результаты)? - Самый важный вопрос: если я остановил поток, я не могу перезапустить его, скорее всего, потому что m_TestThread.m_fStarted все еще установлен (и это личное, поэтому я не могу получить к нему доступ)! И, таким образом, m_TestThread.Start() генерирует исключение (StateException).

Остановка потока с помощью Abort() не решает эту проблему. Если я поставлю свой m_TestThread = null; это работает, но потом я создаю утечку памяти. GC тоже не убирает, даже если я жду хх секунд.

У кого-нибудь есть идея? Вся помощь высоко ценится! Grtz E

1 ответ

Вы можете использовать Thread.Suspend и Thread.Resume для остановки / перезапуска потока.

Для проверки состояния потока вы можете использовать Thread.ThreadState.

Другие вопросы по тегам