Вместо бесконечного цикла используйте логический флаг, который может быть установлен основным классом в качестве условия цикла. Когда вы закончите, установите флаг, чтобы цикл мог корректно завершиться. Если вы реализуете IDisposable
, установите флаг и дождитесь завершения потока, прежде чем вернуться.
Вы можете реализовать отменяемый класс BackgroundWorker
, но, по сути, он будет выполнять то же самое.
Если вы действительно хотите, вы можете дать ему окно времени, чтобы завершить себя после отправки сигнала. Если он не завершается, вы можете прервать поток, как это делает Windows при завершении работы.
Причина, по которой я считаю Thread.Abort
считается "злом", заключается в том, что он оставляет вещи в неопределенном состоянии. Однако, в отличие от уничтожения всего процесса, остальные потоки продолжают работать и могут столкнуться с проблемами.