2011-01-15 2 views
3

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

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

Я думаю, я беспокоюсь об исходных потоках, которые никогда не собираются мусором, поскольку они вызвали больше потоков? Будет ли это так? и как я могу убедиться, что поток закончен?

Обратите внимание, что я гарантирую, что только х число потоков может работать в любое время.

+0

Прочитав еще несколько, я не думаю, что это будет проблемой, так как все обрабатывается автоматически. Но я решил не удалять вопрос на какое-то время, если у кого-то было что-то интересное. –

ответ

2

Нити будут независимыми. Чтобы заставить работать между ними, вам нужна либо базовая синхронизированная очередь, либо что-то вроде метода Control.Invoke.

Ждать, пока нити соседние не вышло, вы можете использовать:

otherThreas.Join(); 

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

+0

Когда вы говорите поток пользовательского интерфейса, вы имеете в виду основной поток - это библиотека классов, которая может закончиться из-за службы Windows. –

+1

@MrShoubs - ну, на самом деле нет «основного» потока - нет ничего особенного в потоке входа, кроме того, что он создается первым. Я бы предположил, что вы, вероятно, хотите, чтобы основной поток обслуживал рабочую очередь в этом случае, хотя ... –

+0

(и количество потоков может быть нефоновыми) –

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