Ну, ответ OO должен был содержать список потоков в качестве поля.
private readonly List<Thread> threads = new List<Thread>();
И затем добавить вновь созданный поток в список в первом обработчике.
var thread = new Thread(myfunc);
thread.Start();
threads.Add(thread);
Затем вы можете перебирать каждую нить во втором обработчике, прерывая каждый из них по очереди.
foreach(var thread in threads)
thread.Abort();
Но я думаю, что наиболее важным моментом здесь является то, что есть почти никогда не хороший повод называть Thread.Abort
.
От MSDN page:
Когда поток вызывает Прервать на себя, эффекта аналогичен выбрасывание исключения; ThreadAbortException происходит немедленно, и результат предсказуем. Однако, если один поток вызывает прерывание в другом потоке, прерывает прерывает любой код работает. Существует также вероятность того, что статический конструктор может быть прерван. В редких случаях это может предотвратить экземпляры этого класса от , созданные в этом домене приложения. В версии версии .NET Framework 1.0 и 1.1 существует вероятность того, что поток может прерваться, тогда как окончательный блок работает , и в этом случае блок finally прерван.
Нить, которая вызывает Прервать может блок, если поток, который будучи прервана в защищенной области кода, такие как поймать блок, наконец блока или стесненного выполнение региона. Если поток, который вызывает Abort , содержит блокировку, которую требует прерывистая нить , может возникнуть взаимоблокировка.
Вы бы гораздо лучше использовать некоторые формы сигнализации, например, установив ManualResetEvent
, что каждый поток будет опрашивать на perioidic интервалами. В качестве альтернативы вы можете использовать класс BackgroundWorker
, который имеет определенную поддержку для отмены задачи (вызовите CancelAsync
на нем и периодически загружайте рабочие потоки для проверки CancellationPending
). Если вы используете .NET 4.0, вы также можете использовать TPL.
Есть ли причина, по которой вы не можете использовать BackgroundWorker или аналогичную конструкцию? Нерестные потоки включают много накладных расходов, поэтому имеет смысл повторно использовать их, когда это возможно. –