Я получил эту ошибку: Unhandled exception. System.Threading.ThreadStateException: Thread is running or terminated; it cannot restart.
В какой-то момент в моем коде я получил поток, помеченный как Stopped
или Suspended
, чтобы обновить его делегат ThreadState для его повторного запуска.
И мне интересно, если функция Mutex.WaitOne()
изменит состояние других заблокированных потоков на Suspended
.
Но с другой стороны, ошибка скажет Thread is running
. Так что я ThreadState должен быть ThreadState.Running
.
Вот где у меня ошибка (иногда)
int freeThreadIndex;
// Get a thread marked as Suspended, Stopped or Null
if(HasThreadAvailable(out freeThreadIndex))
{
Transmitter.PYStruct.PYTask task = m_taskQueue[m_head];
ThreadStart starter = ()=> {
string err;
m_pyRunner.RunCommand(task.cmd, task.args, out err);
};
// Invoke Event
starter += () => {
task.OnTaskDone();
OnThreadEnd();
};
m_threadQueue[freeThreadIndex] = new Thread(starter);
m_threadQueue[freeThreadIndex].Name = task.args[1];
// Got the error on this line
m_threadQueue[freeThreadIndex].Start();
Console.WriteLine($"Start new Thread {task.args[1]}");
m_head = (m_head + 1) % QUEUE_MAX_SIZE;
}
Спасибо за вашу помощь!
РЕДАКТИРОВАТЬ: Исправление проблемы! Еще раз спасибо