Выдается исключение ThreadStateException, поскольку вы пытаетесь запустить поток, который не находится в состоянии запуска. Наиболее вероятные ситуации: когда он уже запущен или полностью завершен.
Потенциально может произойти пара вещей. Во-первых, поток, возможно, перешел из Running в StopRequested, который еще не полностью остановлен, поэтому ваша логика не создает новый поток, и вы пытаетесь запустить поток, который только что завершил работу или собирается завершить завершите работу (ни одно из которых не является допустимым для перезапуска).
Другая возможность состоит в том, что поток был прерван. Прерванные потоки переходят в состояние «Прервано», а не в состояние «Остановлено» и, разумеется, также недопустимы для перезапуска.
Действительно, единственный вид потока, который все еще жив, который можно «перезапустить», - это поток, который приостановлен. Возможно, вы захотите использовать это условие вместо:
if (this.mThread == null || this.mThread.ThreadState != ThreadState.Suspended)