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.