Меняет ли Mutex.WaitOne ThreadState на Приостановлено? - PullRequest
0 голосов
/ 01 ноября 2019

Я получил эту ошибку: 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;
      }

Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ: Исправление проблемы! Еще раз спасибо

...