2012-05-08 2 views
1

Я должен сказать, что это, вероятно, плохой шаблон, но в моей песочнице я создал интерфейс, который вызывает фоновый сервис (который запускает поток и поддерживает его) каждый раз, когда я нажимаю кнопка.Как я могу получить список всех запущенных потоков

Это хорошо, потому что я могу создать ситуацию в хаосе и узнать, как это будет с окружающей средой.

Но, в противном случае, я столкнулся с проблемой: Как я могу получить всю текущую версию потока и убить их всех. Вызов GB или что-то в этом роде.

ответ

3

Я предполагаю, что вы не хотите, список все работает threads- вы хотите получить список запущенных потоков, которые вы начали с помощью некоторого конкретного механизма, не так ли?

Если это так, то вы можете сделать что-то вроде этого, где вы начинаете эти темы:

List<Thread> myThreads = new List<Thread>(); 

public void StartAThread() { 
    Thread t = new Thread(... whatever ...); 
    myThreads.Add(t); 
    t.Start(); 
} 

Теперь, если предположить, что вы хотите, чтобы убить эти темы с крайним предубеждением - то есть, вы хочу, чтобы они мертвы, сейчас, и вы не заботитесь о цепных последствиях ухода с работой наполовину сделана, вы можете сделать:

foreach (var t in myThreads) 
    t.Abort(); 
+2

+1 [Прервать с крайним предубеждением] (HTTP: //en.wikipedia .org/вики/Terminate_with_ extreme_prejudice) – Bob2Chiv

+0

Да! Я об этом жестко. Но мой вопрос каким-то образом направлен на размышления или что-то, чтобы узнать, что работает, чтобы заставить сборщика мусора. – Custodio

+0

Вам не нужно заставлять сборщик мусора. Если вы не можете ссылаться на объект из любого работающего потока, объект имеет право на GC и будет автоматически очищен. Хитрость в том, что первая часть - убедитесь, что объекты недоступны для любой беговой нити. –

Смежные вопросы