В условиях многопоточного приложения разные потоки могут переводить друг друга в разные состояния. Таким образом, поток может находиться одновременно в БОЛЕЕ ЧЕМ ОДНОМ Состоянии.
Например, если поток блокирован в результате вызова метода Wait, а другой поток вызвал по отношению к блокированному потоку метод Abort, то блокированный поток окажется в одно и то же время в состояниях WaitSleepJoin и AbortRequested.
В этом случае, как только поток выйдет из состояния WaitSleepJoin (в котором он оказался в результате выполнения метода Wait), ему будет предъявлено исключение ThreadAbortException, связанное с началом процедуры aborting.
С другой стороны, не все сочетания значений ThreadState допустимы. Например, поток не может одновременно находиться в состояниях Aborted и Unstarted. Перевод потока из одного состояния в другое несовместимое с ним состояние, а также повторная попытка перевода потока в одно и то же состояние (пара потоков один за другим применяют метод Resume() к одному и тому же потоку), может привести к генерации исключения. Поэтому операторы, связанные с управлением потоками следует размещать в блоках try.
Информация о возможности одновременного пребывания потока в нескольких состояниях представлена таблице допустимых состояний: