Правильный способ справиться с этим - иметь объект-флаг, который вы сигнализируете.
Код, работающий в этих потоках, должен периодически проверять этот флаг, чтобы увидеть, должен ли он выйти.
Например, для этого подходит объект ManualResetEvent .
Затем вы можете попросить потоки выйти так:
evt.Set();
и внутри потоков, которые вы проверитедля этого так:
if (evt.WaitOne(0))
return; // or otherwise exit the thread
Во-вторых, поскольку вы используете пул потоков, то происходит то, что все элементы, которые вы поставили в очередь, все равно будут обрабатываться, но если вы добавите оператор ifвыше, до самого начала метода потока, он немедленно завершится.Если этого недостаточно, вы должны построить свою собственную систему, используя обычные потоки, таким образом, вы получите полный контроль.
О, и просто чтобы убедиться, не не использует Thread.Abort.Попросите потоки красиво выйти, не убивайте их.